Java 相当于在 C# 中创建匿名对象?

2022-09-01 05:03:01

在 C# 中,可以执行以下操作:

var objResult = new { success = result };

有没有Java的等价物?


答案 1

Java没有通过关键字向C#提供类型推断,所以虽然你可以创建匿名类型,但它们并不好,因为你无法获得它们的属性。var

因此,您可以创建匿名类的实例,如下所示:

Object myobj = new Object() {
  public final boolean success = true;
}

但是,由于是您无法在代码中访问的实例,并且由于您已经创建了匿名类的实例,因此根据定义,无法显式引用此类。myobjObjectsuccess

在C#中,通过推断类型来解决这个问题,但在Java中没有办法做到这一点。var

通常,匿名类用于创建接口和抽象类的实现,因此使用接口或父类作为类型进行引用。


答案 2

在 Java 10 中,您可以使用匿名类:

boolean result = true;

var objResult = new Object() {
    boolean success = result;
};

System.out.println(objResult.success);

您可以将它们用于流:

var names = List.of("John", "Peter", "Olaf");

var namesAndLength = names.stream().map(n -> new Object() {
    String name = n;
    int length = n.length();
}).collect(toList());

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

https://developer.oracle.com/java/jdk-10-local-variable-type-inference


推荐