2010-07-12 77 views
1

我有一个叫GetInput.java 的课,我有一个叫GetNotReleasedInput.java的课。 我在GetNotReleasedInput中扩展GetInput。 在GetInput中,我调用一个名为addLineToArray() 的私有函数,并在该函数中定义了一个包含有关导入细节的新类。如何在Java中动态地创建对象的新实例?

但是因为我创造了泛型类(GetInput)为所有输入文件, 我不能addLineToArray()说:

AAData nextData = new AAData(); 

,因为我有AA /不释放,在这种情况下,应该是NotReleased。 那么我该如何动态地在该函数中创建新的nextData

回答

2

要么创建一个受保护的方法来创建nextData对象,以便子类可以决定如何执行制造,或者您拥有某种工厂对象(可在外部对象创建时配置)。做后者最简单的方法是通过一个Class并称其为newInstance()方法,但有更多的复杂性可能;一本关于软件模式的书将会深入到这方面。

但是,如果你可以将整个东西委托给GetInput的子类,那么这是最简单的。 (你没有提供足够的信息让我能够计算出你应该使用哪种模式。)

+0

我像你说的那样移动了方法,然后工作。 我也改变了原来的方法来抽象。 谢谢! – Paintrick 2010-07-12 10:13:16

0

默认情况下,Java不允许在运行时修改元数据。你可以用asm编写自己的类加载器,并在类加载时修改字节码,但这可能不是你想要的。我建议所有的类数据类实现Iterable或类似的东西,这样你就可以很容易地加入,然后在不知道实际类型的情况下遍历所有行。

1

这听起来像你可能想要一个虚拟的factory method你可以放置你的对象创建。在addLineToArray()中,您随后拨打 您的虚拟createLineObject()而不是new AAData()

但是,究竟要采用何种方式取决于许多因素:创建的数据类型取决于GetInput类,还是单独的决定(您的GetInput类可能会因行为而异,而数据可能会有所不同按格式)?是否所有数据都相关(例如继承自AAData)?

你应该添加更多关于你想要完成的细节。