Способ использования строки для создания новых классов - PullRequest
1 голос
/ 25 декабря 2009

У меня есть строка с именем класса, есть ли способ (написание на Java), чтобы использовать эту строку при создании нового экземпляра этого класса, чтобы сделать что-то вроде этого:
object obj = new dataInString .
Таким образом, dataInString анализируется из строки.

Ответы [ 4 ]

5 голосов
/ 25 декабря 2009

Вы имеете в виду что-то вроде Class.forName(String)? Цитирую javadoc метода:

Возвращает объект Class, связанный с классом или интерфейсом с указанным именем строки. Вызов этого метода эквивалентен:

Class.forName(className, true, currentLoader)

где currentLoader обозначает загрузчик определяющего класса текущего класса.

Например, следующий фрагмент кода возвращает дескриптор времени исполнения Class для класса с именем java.lang.Thread:

Class t = Class.forName("java.lang.Thread")

Вызов forName("X") вызывает инициализацию класса с именем X.

А затем вызовите Class#newInstance() для возвращенного Class (он должен иметь пустой конструктор).

Создает новый экземпляр класса, представленного этим Class объектом. Класс создается как бы выражением new с пустым списком аргументов. Класс инициализируется, если он еще не был инициализирован.

4 голосов
/ 25 декабря 2009

Если предположить, что класс имеет конструктор без аргументов, то следующее должно сделать трюк

Class<?> clazz = Class.forName("someclass");
Object obj = clazz.newInstance();

Если вам нужно создать объект с помощью другого конструктора, вам нужно будет сделать что-то вроде этого:

Constructor<?> ctor = clazz.getConstructor(ArgClass.class, Integer.TYPE);
Object obj = ctor.newInstance(arg, Integer.valueOf(42)); 

Существует ряд проверенных исключений, которые необходимо обработать в любом случае ...

3 голосов
/ 25 декабря 2009

Вы можете использовать Отражение .

0 голосов
/ 25 декабря 2009

Используйте отражения для создания объектов. Простой class.forName ("com.blah.blah") должен стать хорошей отправной точкой для поиска дополнительной информации об отражениях.

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