Создание пользовательских объектов на лету

Я хотел бы знать, есть ли способ создания объектов "на лету" или я должен сказать, не используя объект Class и его свойства. Обычный способ, которым я это занимаюсь, - это.

ApiHelper apiHelper = new ApiHelper();
User user = new User();
user.Firstname = "FirstName";
apiHelper.send("", user);

Я хотел бы выполнить это в своем фрагменте кода:

ApiHelper apiHelper = new ApiHelper();
apiHelper.send("", new { Firstname = "Firstname"});

Второй параметр для send() имеет тип данных Object, и этот объект позже преобразуется в строку json.

Это пример С#, есть ли аналоги в Java? Я думаю, что если я использую первый подход при создании объектов, у меня должно быть много классов, чтобы соответствовать объектам, которые мне нужно собрать, поэтому я надеялся, что смогу сделать это в java, используя 2-й подход,

Это может быть странным или странным вопросом для некоторых, поэтому, пожалуйста, со мной. Я все еще использую С# в течение длительного времени. Есть идеи? Спасибо!

3 ответа

Технически это возможно с Java. синтаксис будет следующим:

apiHelper.send("", new Object(){ String firstName = "Firstname"});

Однако, это вообще довольно бесполезно. То, что вы, скорее всего, захотите сделать, создает интерфейс/класс для определения методов и полей, которые вы хотите, и передайте им экземпляр.

Пример:

class Data{
 String firstname;
 public Data(String firstname){
 this.firstname=firstname;
 }
}


Ну, все, что вам действительно нужно, это конструктор, который принимает Firstname в качестве параметра.

public User(String fName) {
 Firstname = fName;
}

Хотя, заглавные буквы ваших членов не являются соглашениями на Java, как в С#; должно быть

String firstname;

Тогда вы просто сделаете...

apiHelper.send("", new User("Firstname"));


Если вы не можете изменить User, чтобы добавить конструктор, то я бы использовал "инициализацию с двойной привязкой", где вы можете в основном запускать код в классе, в котором этот экземпляр создается:

ApiHelper apiHelper = new ApiHelper();
apiHelper.send("", new User(){{
 Firstname = "Firstname";
 }});

Затем строка Firstname = "Firstname"; выполняется сразу после экземпляра.

licensed under cc by-sa 3.0 with attribution.