Класс Java динамически с параметром конструктора - PullRequest
7 голосов
/ 03 октября 2011

Мне нужно создать класс динамически, но я хочу использовать конструктор класса, передавая параметр.

В настоящее время мой код выглядит как

Class<HsaInterface> _tempClass = (Class<HsaInterface>) Class.forName(hsaClass);
        _tempClass.getDeclaredConstructor(String.class);
        HsaInterface hsaAdapter = _tempClass.newInstance();
        hsaAdapter.executeRequestTxn(txnData);

Как я могу вызвать конструктор с параметром?

Ответы [ 3 ]

14 голосов
/ 03 октября 2011

Вы приблизились, getDeclaredConstructor() возвращает объект Constructor, который вы должны использовать.Кроме того, вам необходимо передать объект String методу newInstance() этого Constructor.

Class<HsaInterface> _tempClass = (Class<HsaInterface>) Class.forName(hsaClass);
Constructor<HsaInterface> ctor = _tempClass.getDeclaredConstructor(String.class);
HsaInterface hsaAdapter = ctor.newInstance(aString);
hsaAdapter.executeRequestTxn(txnData);
6 голосов
/ 03 октября 2011
Class<HsaInterface> _tempClass = (Class<HsaInterface>) Class.forName(hsaClass);

// Gets the constructor instance and turns on the accessible flag
Constructor ctor = _tempClass.getDeclaredConstructor(String.class);
ctor.setAccessible(true);

// Appends constructor parameters
HsaInterface hsaAdapter = ctor.newInstance("parameter");

hsaAdapter.executeRequestTxn(txnData);
1 голос
/ 03 октября 2011
Constructor constructor = _tempClass.getDeclaredConstructor(String.class);
Object obj = constructor.newInstance("some string");
...