假设我有一个类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]
and then a[1] = anArray[1]
,那么a[0]
anda[1]
将是同一个对象。
我正在寻找的是,是否有一种方法可以为每个对象创建未定义数量的实例,而不必将其实现为一个链if else
(因为实际上我有超过 2 种类型的对象)。我正在考虑使用数组或哈希表,但我不知道是否真的有办法做到这一点。
假设它们实现了一个公共接口(或超类)Common
:
public interface Common {
}
public class Foo implements Common {
}
public class Bar implements Common {
}
然后,在 Java 8 中,我们可以定义一个Supplier
s数组:
List<Supplier<Common>> anArray = new ArrayList<>();
anArray.add(Foo::new);
anArray.add(Bar::new);
//or with lambdas:
anArray.add(() -> new Bar());
用法:
Common aNewCommon = anArray.get(0).get();
如果没有Common
接口(或超类),您将不得不从Object
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句