Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the Java equivalent of defining a classless object in JavaScript?

Tags:

java

object

I'm wondering if I can declare an object in-line in Java like I can in JavaScript. For example, in JavaScript I could say

let nameOfObject = {
    anyKey: "my value",
    someOtherValue: 5
};

console.log(nameOfObject.anyKey);// This logs "my value"

and this will create a classless object and assign nameOfObject as its "pointer" of sorts... How can I do this in Java? How do I create an object without a class?

I found one possible solution which looks like

Object nameOfObject = new Object(){
    public String anyKey = "my value";
    public int someOtherValue = 5;
};

System.out.println(nameOfObject.anyKey);

But that doesn't seem to compile, and says "anyKey cannot be resolved" and according to some other sources, will not work at all...

So I might be doing something very wrong, or maybe there's a different method, or maybe it's just straight up not possible with Java and I need to do it a different way...


class Some{
    public String anyKey;
}

Some some = new Some() {
    this.anyKey = "my value";
};

This code throws an error saying Syntax error, insert ";" to complete declaration, however

class Some{
    public void anyMethod() {
        
    }
}
        
Some some = new Some() {
    public void anyMethod() {
        System.out.println("Okay");
    }
};

Works perfectly fine?

I don't understand what's going on here, but I would really appreciate an explanation and/or a solution (if one exists).

like image 523
OOPS Studio Avatar asked Jan 08 '21 07:01

OOPS Studio


1 Answers

You can't really think of it as an "object" in Java. JavaScript objects are unique implementations of HashTables. If you want similar functionality, you can use a Java HashMap or ConcurrentHashMap(HashTable), depending on your specific requirements.

// we only add String->Double, but since you want to add "any type",
// we declare Map<Object, Object>
HashMap<Object, Object> map= new HashMap<>(); 
map.put("Zara", new Double(3434.34));
map.put("Mahnaz", new Double(123.22));

String[] names = map.keys();
      
while(names.hasMoreElements()) {
    str = (String) names.nextElement();
    System.out.println(str + ": " + map.get(str));
}
like image 66
Mick Avatar answered Oct 05 '22 10:10

Mick