gpt4 book ai didi

用于创建新对象的 Java 反射

转载 作者:行者123 更新时间:2023-12-01 10:47:05 24 4
gpt4 key购买 nike

有没有办法使用 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
....
}

最佳答案

我在这里看到的常见习惯用法是使用 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 方法。一个问题是如何确定调用哪个 setter?如果传递参数“10”,则为JButton ,就是setAlignmentX , setAlignmentY ,或 setText方法?

此时你必须全力以赴。

<class>
<name>javax.swing.JButton</name>
<set><method>setAlignmentX</method><value>10</value></set>
</class>

现在你遇到了一些问题,一些 setter 将其他类作为参数。有些类是不可变的( IntegerCharacter 是),它们根本没有 setter,你必须调用 ctor。

您基本上在这里进入了序列化(这是一个非常困难的问题)。看看XmlEncoderXmlDecoder ,他们做的事情接近你想要的。 https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html

关于用于创建新对象的 Java 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com