集合允许多种预定义类型

时间:2014-12-17 09:40:26

标签: java generics collections types interface

正如问题所述,是否可以定义一个集合,该集合仅允许一组预定义的,可能不相关的类型(即,不从公共对象扩展)。这种事情:

List<Foo|Bar> list = new ArrayList<Foo|Bar>();
list.add(new Foo());//Allow
list.add(new Bar());//Allow
list.add(new Baz());//Disallow

由于我以前从未见过这样做,我认为这可能是不可能的。如果没有,那么为什么不是有充分的理由呢?

我想一个解决方案是让每个必需的类继承一个空接口,然后将列表的类型设置为该接口。这是否会被认为是正常的&#39;练?

1 个答案:

答案 0 :(得分:3)

这是不可能的(假设FooBarObject之外没有共同的超类,也没有公共接口。

原因:

假设有可能:

List<Foo|Bar> list = new ArrayList<Foo|Bar>();
list.add(new Foo());//Allow
list.add(new Bar());//Allow

现在,list.get(0)会返回什么类型?

这两行都不能通过编译,因为list.get(0)不能同时属于这两种类型:

Foo foo = list.get(0);
Bar bar = list.get(0);

这意味着唯一可以编译的是:

Object obj = list.get(0);

与使用原始List类型没有任何优势。