繁体   English   中英

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

[英]Adding a an object as a member variable to a new Class in run time in Java

在从运行时从特定包中获取类名称的地方有此要求。 我之前不知道上课

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

现在我需要为上述列表中的每个类实例化一个新的Object并将其添加为另一个类的成员(例如Class Model)

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

    Class tmp = classes.get(i);

    }

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

不太干净的方法是编辑.java文件流,但想知道我是否可以从程序本身执行此操作。

您想使用Constructor#newInstance(Object...) 这比Class#newInstance更可取,因为后者将传播no-args构造函数抛出的任何异常,即使该异常是经过检查的异常也是如此。 这意味着您不会对已检查的异常进行任何编译时类型检查。 相反, Constructor#newInstance将引发一个InvocationTargetException ,该异常包装由构造函数引发的已检查异常。

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

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

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

我们可以使用class.forName() ,该类用于在运行时动态加载类。 例如: class.forName(要加载的类的名称),如果要为已加载的类创建对象,则可以使用new instance() 例如: Class.forName(“ Employee”)。newInstance()您将获得employee对象。 这样,我们可以动态加载类并在运行时创建该加载类的对象。

在您的情况下,您可以遍历列表并加载类,并为那些已加载的类实例化对象,然后根据需要使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM