在javascript中定义无类对象的java等价物是什么?

uqjltbpv  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(410)

我想知道我是否可以像在javascript中那样用java在线声明一个对象。例如,在javascript中,我可以说

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

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

这将创建一个无类对象并赋值 nameOfObject 作为它的“指针”。。。如何在java中实现这一点?如何创建没有类的对象?
我找到了一个可能的解决办法

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

System.out.println(nameOfObject.anyKey);

但这似乎没有编译,并说“任何密钥无法解决”和根据一些其他来源,将不会工作在所有。。。
所以我可能做了一些非常错误的事情,或者可能有一个不同的方法,或者可能这是直接的java不可能的,我需要用不同的方法来做。。。

class Some{
    public String anyKey;
}

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

此代码引发一个错误 Syntax error, insert ";" to complete declaration 然而

class Some{
    public void anyMethod() {

    }
}

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

效果很好?
我不明白这里发生了什么,但我真的很想得到一个解释和/或解决方案(如果有的话)。

ckx4rj1h

ckx4rj1h1#

你不能真的把它当作java中的“对象”。javascript对象是哈希表的独特实现。如果您想要类似的功能,可以根据您的具体需求使用java hashmap或concurrenthashmap(hashtable)。

// 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));
}
vfhzx4xs

vfhzx4xs2#

因此,java中的所有对象都有一个与之相关联的类。甚至生的 Objects 上一节课:the Object 同学们!没有类就无法创建对象,因为所有值都需要某种类型的类型。但这并不是什么大问题。如果需要存储某些值的对象,可以创建一个有空间容纳这些值的类。在任何情况下你都不能做到这一点。
也就是说,如果您只是想要一种将键Map到值的方法,我建议您研究map数据结构。

vkc1a9a2

vkc1a9a23#

javascript类不同于java类,javascript不是一种基于类的面向对象语言,js中的一个对象被用作保存属性的模板,但是java类中可以保存变量(属性)和函数,所以在java中初始化一个对象必须有一个用于该对象的类,您可以将其视为如何启动对象的蓝图,例如创建一个类:

public class Example {
    public String link = "https://stackoverflow.com/";

    public void printLink() {
        System.out.println(link); // Prints the string stored in link
    }

    public void openLink() {
        // Some code to open the link in the browser
    }
}

要从您创建的类中初始化对象,请在main中或在代码将运行的地方调用此命令:

Example example = new Example();
example.printLink(); // Printed the link
example.openLink(); // Opened the link
example.link = "https://example-link.com/"; // Changed the link

请注意,示例类可能位于不同的文件中,文件名必须与类名相同,这里是(example.java)
无论如何,如果您正在为javascript类寻找一个等价的hashmap或hashtable可能非常接近。

相关问题