Существуют ли в Java выражения для создания объектов, подобные тем, которые используются в C #? - PullRequest
8 голосов
/ 29 июня 2011

В C # я могу создать экземпляр каждого пользовательского класса, который я пишу, и передать значения для его членов, например:

public class MyClass
{
    public int number;
    public string text;
}

var newInstance = new MyClass { number = 1, text = "some text" };

Этот способ создания объектов называется создание объектавыражения .Есть ли способ, которым я могу сделать то же самое в Java?Я хочу передать значения для произвольных открытых членов класса.

Ответы [ 2 ]

10 голосов
/ 29 июня 2011

Нет, ничего подобного не существует.Самое близкое, что вы можете сделать в Java (без написания класса построителя и т. Д.), Это использовать анонимный внутренний класс и блок инициализатора, что ужасно, но работает:

MyClass foo = new MyClass()
{{
    number = 1;
    text = "some text";
}};

Обратите внимание на двойные скобки ... один куказать «это содержимое анонимного внутреннего класса» и один для обозначения блока инициализатора.Я не буду рекомендовать этот стиль лично.

0 голосов
/ 29 июня 2011

Нет. Но я не нахожу следующий код слишком многословным

MyClass obj = new MyClass();
obj.number = 1;
obj.text = "some text";

Или старый добрый конструктор, вызывающий слишком запутанный

MyClass obj = new MyClass(1, "some text");

Некоторые могут предложить метод цепочки:

MyClass obj = new MyClass().number(1).text("some text");

class MyClass
    int number
    public MyClass number(int number){ this.number=number; return this; }

, который требует дополнительного метода для каждого поля. Это код котельной плиты, здесь может помочь IDE.

Тогда есть шаблон построителя, который еще больше подходит для автора API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...