Java中的功能是否类似于C#的匿名类型?

Iva*_*van 10 java anonymous-types

我想知道Java中是否存在类似于C#的匿名类型的类似功能:

var a = new {Count = 5, Message = "A string."};

或者这个概念是否违背Java范式?

编辑:

我想Hashable()在Java中使用有点类似.

Mik*_*uel 12

不,没有相应的.varJava中没有无类型变量声明(),Java编译器可以使用自动生成的类型名称来填充以允许a.Counta.Message访问.


zac*_*usz 7

也许你的意思是这样的:

Object o = new Object(){
    int count = 5;
    String message = "A string.";
};
Run Code Online (Sandbox Code Playgroud)

@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");
Run Code Online (Sandbox Code Playgroud)

  • 除非我弄错了,否则你不能做例如`o.count` - 这些属性将毫无用处. (6认同)
  • @defnan的属性并非无用.Object 0 = new Object(){int count = 0; public String toString(){return"此对象已被toString'ed"+(count ++)+"次".; } (3认同)
  • @delnan我想如果你知道这些名字,你可以反思它. (2认同)
  • @Mike Samuel:看看这个片段:`Object o = new Object(){private int count = 5;}; Field f = o.getClass().getDeclaredField("count"); f.setAccessible(true); int c = f.getInt(o);`我知道这很奇怪,不方便而且很慢.但是它有效;)BTW我在回复中添加了`Map`的例子. (2认同)