java不允许字段初始化像C#一样吗?
public class MyClass {
public String var1;
public String var2;
public String var3;
}
//.........
String myVar1 = //....
String myVar2 = //....
String myVar3 = //....
return new MyClass { // doesn't work in Java
var1 = myVar1,
var2 = myVar2,
var3 = myVar3
};
我想我已经在某处读过了。但我无法找到它,因为字段初始化似乎是另一回事。
答案 0 :(得分:0)
没有java允许字段初始化像C#那样
是的。
但是这个
return new MyClass { // doesn't work in Java
var1 = myVar1,
var2 = myVar2,
var3 = myVar3
};
不是字段初始化,它在C#中称为对象初始化,java没有提供这样的语法。
答案 1 :(得分:0)
不,Java不允许这样做。 Java语法没有提供等价物。你可以更接近初始化一个匿名类,但它不是一回事。
所以真正的答案是Java不支持字段初始化,但确实支持C#不支持的匿名类实例化。
答案 2 :(得分:0)
java中没有等价物。但是在java 8中,你可以像c#对象初始化一样进行模拟。首先定义一个这样的函数。
public static <T, R> R apply(final T t, final Function<T, R> function) {
return function.apply(t);
}
然后像这样申请。
final McTrack track = Util.apply(new McTrack(), mcTrack -> {
mcTrack.setArea(Util.apply(new Area(), area -> {
area.setId(1L);
area.setName("Dhaka South");
area.setRegion(Util.apply(new Region(), region -> {
region.setId(1L);
region.setName("Dhaka");
return region;
}));
return area;
}));
mcTrack.setId(1L);
mcTrack.setDate(new Date());
return mcTrack;
});
我发现它很安静。