2015-11-15 2 views
1

Не разрешает ли 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 
    }; 

Я думаю, что где-то читал. Но я не могу найти его, потому что инициализация полей, похоже, другая.

+0

«like C# does» - что вы подразумеваете под этим утверждением? – Rehman

ответ

1

Нет, Java этого не допускает. Синтаксис Java не обеспечивает эквивалент. Вы можете приблизиться к инициализации анонимного класса, но это не одно и то же.

Так что реальный ответ Java не поддерживает инициализацию поля, но поддерживает анонимный экземпляр класса, который C# не поддерживает.

1

Не ява позволяют инициализации поля, как C# делает

да это делает.

но

return new MyClass { // doesn't work in Java 
     var1 = myVar1, 
     var2 = myVar2, 
     var3 = myVar3 
    }; 

не инициализация поля это называется инициализация объекта в C#, Java не обеспечивает такой синтаксис.

+0

Нет, это не так ... – aleroot

+0

@aleroot прочитал полный ответ – Ramanlfc

+0

Да, но первая часть неверна – aleroot

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

Я нашел его тихим полезным.

Смежные вопросы