我想知道Java中是否存在类似于C#的匿名类型的类似功能:
var a = new {Count = 5, Message = "A string."};
或者这个概念是否违背Java范式?
修改
我认为在Java中使用Hashable()
有点类似。
答案 0 :(得分:12)
没有。没有等价物。 Java中没有无类型变量声明(var
),Java编译器可以使用自动生成的类型名称填写,以允许访问a.Count
和a.Message
。
答案 1 :(得分:6)
也许你的意思是这样的:
Object o = new Object(){
int count = 5;
String message = "A string.";
};
@Commenters :当然这是一个理论上非常不方便的例子。
可能OP可能会使用Map
:
Map<String,Object> a = new HashMap<String,Object>();
a.put("Count", 5);
a.put("Message", "A string.");
int count = (Integer)a.get("Count"); //better use Integer instead of int to avoid NPE
String message = (String)a.get("Message");
答案 2 :(得分:0)
Java有一个称为本地类的功能,它有点类似。它们对于创建类或实现在特定方法之外并不真正需要了解的接口非常有用。本地类的范围受限定它的代码块的限制。
public void doSomething() {
class SomeLocalClass {
public int count = 5;
public String message = "A string.";
}
SomeLocalClass local = new SomeLocalClass();
System.out.println(local.count);
System.out.println(local.message);
}
与C#中的匿名类型不同,Java本地类及其字段具有明确定义的类型,但我认为它们可能有一些重叠的用例。