java - 在 Java 运行时将对象作为成员变量添加到新类中

标签 java

有这样的要求,我在运行时从特定包获取类名称。我事先不知道类(class)

List<Class<?>> classes = PlayGround.find("MyOwn.newpackage");

现在我需要为上面列表中的每个类实例化一个新对象,并将其添加为另一个类(例如类模型)中的成员

 for (int i=0;i<classes.size();i++){

    Class tmp = classes.get(i);

    }

是否可以从上面的 tmp 类创建一个对象,并将其添加为 Java 中实时类模型的成员变量?

不太干净的方法是编辑 .java 文件流,但想知道我可以从程序本身做到这一点。

最佳答案

您想使用Constructor#newInstance(Object...) 。这比 Class#newInstance 更可取,因为后者将传播无参数构造函数抛出的任何异常,即使它是经过检查的异常。这意味着您不会对已检查异常进行任何编译时类型检查。相比之下,Constructor#newInstance 将抛出一个 InitationTargetException,它包装了构造函数抛出的已检查异常。

因此,您想要执行以下操作(为简洁起见,省略了异常处理):

Constructor<?> constructor = tmp.getConstructor();

现在您可以通过调用constructor.newInstance()来创建一个新实例。至于“将其作为成员变量添加到另一个类中”,为什么需要这样做?对于目标类来说,拥有某种类型的列表会容易得多,然后您只需将新实例插入到该列表中即可。或者,如果您确切知道目标类需要什么类型的对象,请预先创建成员变量,然后您可以直接提供它(通过构造函数或通过 setter)。

关于java - 在 Java 运行时将对象作为成员变量添加到新类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34012084/

相关文章:

java - TomEE++ 和 ObjectDB 无法正常工作

java - 处理多个 boolean 组合

java - 写入下一个空白行 Excel - Java

java - 字符串格式(或类似功能)或 PreparedStatement

java - 如何找到在字符串中至少出现两次且不重叠的任意两个字母对

java - java中数据抽象和过程抽象的区别

java - 在 PostgreSQL 中使用模式的 Hibernate 和 Multi-Tenancy 数据库

java - 设计一个具有级联函数调用的API(Class.doThis ("...").doThat ("...").....)

java - 通过 ui :repeat in JSF 内的 jQuery UI 小部件访问附加值

java - Apache POI : How to add Diagonal Border