2013-04-24 3 views
2

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

Object obj = Class.forName("com.my.object.MyObject").newInstance(); 

Мне удалось создать MyObject. Мой вопрос в том, как я могу создать встроенный Java-объект, такой как Long или String, из строки. Мне нужно сделать это, потому что я могу знать тип объекта во время выполнения в текстовом формате.

Я сделал это, но не работал.

Object obj = Class.forName("java.lang.Long").newInstance(); 
+0

Как и в сторону: несмотря на то, что очевидно для большинства людей, которые могут ответить на этот вопрос, почему ваш второй образец кода не работает, вы должны избегать только сказать «это Бесполезный «работа» на SO. Дайте нам трассировку стека и сообщение об ошибке. И лучше посмотрите сообщение об ошибке и посмотрите, поможет ли вам устранить эту ошибку. – millimoose

+0

(Хорошо, ошибка в этом случае довольно чертовски бесполезна, но все же.) – millimoose

+0

Спасибо за комментарий. В следующий раз я добавлю более подробное сообщение об ошибке. – codereviewanskquestions

ответ

4

Прочитайте документацию для newInstance(), он скажет вам, что это вызывает конструктор без параметров класса. Если у встроенного (или любого другого) класса есть такой конструктор, вы можете создать его так же. В противном случае вам нужно будет вызвать конкретный конструктор, используя Class.getConstructor() и передать ему соответствующие параметры. Таким образом, чтобы вызвать new Long(String) конструктор, например:

Class.forName("java.lang.Long") 
    .getConstructor(String.class) 
    .newInstance("12345"); 
11

java.lang.Long не имеет конструктор без аргументов, так что вы не можете назвать newInstance подобное. Вместо этого вам нужно найти конструктор с правильными аргументами, построить массив аргументов, а затем вызвать конструктор.

Constructor constr = Class.forName("java.lang.Long").getConstructor(String.class); 
Object myLong = constr.invoke("5"); 
Смежные вопросы