Распространенное идиома Я вижу здесь использовать Class.forName()
.
public static Object makeNew(String type) throws Exception {
Class clazz = Class.forName(type);
return clazz.newInstance();
}
Для int
, char
вы должны использовать имена своих классовых типов, вы не можете на самом деле сделать примитивный. «java.lang.Integer», «java.lang.Character» и т. д., соответственно. Вам нужно будет проверить их специально, если вы хотите передать «int», «char» и т. Д.
Добавление «значения» в виде строки намного сложнее. У большинства классов не будет способа изменить строку в начальное состояние. Вы обязательно должны использовать особый случай, чтобы примитивы обеспечивали начальное значение. В целом, я думаю, что это не отличный способ подойти к любой проблеме, которую вы связываете, чтобы решить.
Так вы упомянули в своем комментарии об использовании методов setter. Одна из проблем заключается в том, как вы определяете, какой сеттер вы вызываете? Если вы передаете параметр «10», для JButton
, это то, что setAlignmentX
, setAlignmentY
или метод setText
?
На этом этапе вы должны пройти целую свиньи на нем.
<class>
<name>javax.swing.JButton</name>
<set><method>setAlignmentX</method><value>10</value></set>
</class>
У вас возникла проблема в том, что некоторые сеттеры используют другие классы в качестве параметров. И некоторые классы неизменяемы (Integer
и Character
), у них нет сеттеров вообще, вам нужно будет позвонить в ctor.
Вы в основном попадаете в сериализацию здесь (это очень трудная проблема). Взгляните на XmlEncoder
и XmlDecoder
, они делают что-то близкое к тому, что вы хотите. https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html
err, 'return 'c';' and such? Зачем размышлять? – zapl
Причина в том, что мы знаем только тип и значение во время выполнения, я думал, что размышление здесь может быть полезным. – firefly
Нет, код на следующей строке после 'if (type.compareTo (" char ") == 0)' знает тип во время компиляции. Это 'char' или фактически' Character', когда вы возвращаете это завернутое как объект. – zapl