繁体   English   中英

如何在Java中动态创建对象的新实例?

[英]How can I dynamically create a new instance of an object in Java?

我有一个名为GetInput.java的类,还有一个名为GetNotReleasedInput.java的类。 我在GetNotReleasedInput扩展了GetInput GetInput ,我调用一个名为addLineToArray()的私有函数,并在该函数中定义一个新类,其中包含有关导入的详细信息。

但是,由于我正在为所有输入文件创建一个通用类( GetInput ),所以我不能在addLineToArray()说:

AAData nextData = new AAData();

因为我有AA /未发布,因此在这种情况下,它应该不发布。 那么,如何在该函数中动态创建新的nextData呢?

您可以使用受保护的方法来创建nextData对象,以便子类可以决定如何进行制造,或者您可以将某种工厂对象(可在外部对象创建时进行配置)委托给该对象。 做后者的最简单的方法是在传递Class ,并调用它newInstance()方法,但还有很多更复杂可能; 关于软件模式的书将对此进行深入的探讨。

但是,如果您可以将整个事情委托给GetInput的子类,那么这是最简单的。 (您没有为我提供足够的信息,无法确定您应该实际使用的模式。)

听起来您可能想要一个虚拟工厂方法 ,可以在其中放置对象创建对象。 addLineToArray()你再调用虚拟createLineObject()而不是new AAData()

但是,究竟要走的路取决于许多因素:创建的数据类型取决于GetInput类,还是该决定是单独的(您的GetInput类可能因行为而异,而数据随格式而异)? 是否所有数据都相关(例如,继承自AAData )?

您应该添加有关您要完成的任务的更多详细信息。

Java默认情况下不允许在运行时修改元数据。 您可以使用asm编写自己的类加载器,并在类加载时修改字节码,但这可能不是您想要的。

相反,我建议您所有的类数据类都实现Iterable或类似的东西,以便您可以轻松地然后联接并遍历所有行,而无需知道实际的类型。

暂无
暂无

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

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