我有一个名为GetInput.java
的班级
我有一个名为GetNotReleasedInput.java
的班级。
我在GetInput
中延伸GetNotReleasedInput
。
在GetInput
中,我调用了一个名为addLineToArray()
的私有函数
在该函数中,我定义了一个新类,其中包含有关导入的详细信息。
但是,因为我正在为所有输入文件创建一个通用类(GetInput
),
我不能在addLineToArray()
中说:
AAData nextData = new AAData();
因为我有AA / Not Released,在这种情况下它应该是NotReleased。
那么如何在该函数中动态生成新的nextData
?
答案 0 :(得分:2)
要么创建一个受保护的方法来创建nextData
对象,以便子类可以决定如何进行制造,或者您有某种工厂对象(可在外部对象创建时配置),您可以将其委托给。执行后者的最简单方法是传入Class
并调用其newInstance()
方法,但有一个 lot 更复杂的可能性;一本关于软件模式的书将在这方面深入探讨。
但是,如果您可以将整个事务委托给GetInput
的子类,那么这是最简单的。 (您没有为我提供足够的信息,以便能够确定您应该使用哪种模式。)
答案 1 :(得分:1)
听起来您可能想要一个虚拟factory method,您可以在其中放置对象。在addLineToArray()
中,您可以致电
您的虚拟createLineObject()
而不是new AAData()
。
但是,确切的方法取决于许多因素:创建的数据类型取决于GetInput
类,还是单独决定(您的GetInput
类可能会有所不同行为,而数据可能因格式而异)?是否所有数据都相关(例如继承自AAData
)?
您应该添加有关您要完成的内容的更多详细信息。
答案 2 :(得分:0)
默认情况下,Java不允许在运行时修改元数据。您可以使用asm编写自己的类加载器,并在类加载时修改字节码,但这可能不是您想要的。
相反,我建议您所有的类数据类都实现Iterable
或类似的东西,以便您可以轻松地加入然后迭代所有行而不知道实际类型。