【发布时间】:2017-08-23 04:09:58
【问题描述】:
假设我有一个类 Foo 和另一个类 Bar,它们都从超类 Foobar 扩展而来,每个类都有自己的构造函数。
所以,我想在 Java 8 中创建一个应用程序,让用户从要实现的对象列表中进行选择,并将它们添加到列表中——我正在考虑使用数组或哈希表——在这种情况下,我想要显示如下消息:
Choose an object of the following list:
[1] Foo
[2] Bar
这个想法是让用户创建此类类的多个实例并将它们添加到数组中。比如用户选择1,我想给变量赋值a[0] = new Foo(),然后如果他选择2,a[1] = new Bar(),但是,如果用户再次选择1,那么a[2]应该是一个新的实例的Foo。我的第一个想法是使用以下构造函数初始化一个数组:
anArray[1] = new Foo();
anArray[2] = new Bar();
该实现的问题在于,如果我调用a[0] = anArray[1],然后调用a[1] = anArray[1],那么a[0] 和a[1] 将是同一个对象。
我正在寻找的是是否有一种方法可以创建每个对象的未定义数量的实例,而不必将其实现为if else 链(因为实际上我有超过 2 种类型的对象)。我在考虑使用数组或哈希表,但我不知道是否真的有办法做到这一点。
【问题讨论】:
-
什么 Java 版本?
-
构造函数通过反射以
Constructor的形式提供,因此您可以将它们存储到某个数组或集合中(然后通过newInstance()调用它们)。但是,您可能希望改用工厂对象。或者,您可以使用anArray[1] = new Foo();等,然后通过调用a[0] = anArray[1].clone()等创建副本。 -
@weston 我正在使用 Java 8
-
anArray 的类型是什么?有共同的基类吗?
-
@AndrewS 是的,它们都是从一个共同的超类扩展而来的
标签: java arrays class constructor hashtable