字段在Java中初始化,如在C#中

时间:2015-11-15 09:24:17

标签: java c#

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
   };

我想我已经在某处读过了。但我无法找到它,因为字段初始化似乎是另一回事。

3 个答案:

答案 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;
    });

我发现它很安静。