Java создать динамический класс - PullRequest
1 голос
/ 31 августа 2010

У меня есть 2 вопроса, с которыми я надеялся, что кто-то может мне помочь.Есть ли способ создать класс на лету с Android / Java, а также добавить переменные в класс?Например, я хотел бы сделать что-то вроде этого:

Class c = new Class();
c.name = 'testing';
c.count = 0;

c.getName = new function(){
  return c.name;
}

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

Ответы [ 2 ]

2 голосов
/ 31 августа 2010

Нет, описанный вами синтаксис невозможен в Java. Я не уверен, что вы пытаетесь достичь там. Если вы хотите создать класс для хранения данных на лету, вы можете создать анонимный внутренний класс.

Object object = new Object() {
  private String name = testing;
  private int count = 0;

  public String getName() {
    return name;
  }
}

В общем, я бы не использовал это для объектов данных. Эта функциональность обычно используется для анонимных реализаций интерфейсов для поддержки обратных вызовов и т. Д.

1 голос
/ 31 августа 2010

Обычно это не делается. Это может быть сделано с помощью размышлений, но это будет довольно плохая идея - этот тип кода действительно раздражает отладку, не будет правильно взаимодействовать в IDE (например, нажатие ctrl на экземпляре c.getName mightn ' я не смогу перейти туда, где определен метод), вероятно, это будет довольно большой удар по производительности и т. д.

Однако для некоторых универсальных инструментов это возможно. Я полагаю, что Hibernate может создавать классы из таблиц БД.

Однако самое распространенное использование - это моделирование, используемое в средах тестирования - они могут делать почти то, что вы хотите. Посмотрите на EasyMock с TestNG.

В общем, вам лучше просто определить бизнес-класс и пойти по нему, а не пытаться создать какую-то абстрактную среду, которая генерирует ваши классы для вас.

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