有没有办法使用Java Reflection创建原始数据类型变量?
例如,
public Object createObj(String type, String value){
if(type.compareTo("char") == 0)
//return a char
else if(type.compareTo("int") == 0)
//return an int
....
}
答案 0 :(得分:1)
我在这里看到的常见习语是使用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方法。一个问题是你如何确定你打电话给哪个二传手?如果您为JButton
传递参数“10”,那是setAlignmentX
,setAlignmentY
还是setText
方法?
此时你必须全力以赴。
<class>
<name>javax.swing.JButton</name>
<set><method>setAlignmentX</method><value>10</value></set>
</class>
现在您遇到的问题是某些setter将其他类作为参数。有些类是不可变的(Integer
和Character
是),它们根本没有setter,你必须打电话给ctor。
你基本上是在这里进行序列化(这是一个非常难的问题)。看看XmlEncoder
和XmlDecoder
,他们会做一些接近你想要的事情。 https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html