正如问题所述,是否可以定义一个集合,该集合仅允许一组预定义的,可能不相关的类型(即,不从公共对象扩展)。这种事情:
List<Foo|Bar> list = new ArrayList<Foo|Bar>();
list.add(new Foo());//Allow
list.add(new Bar());//Allow
list.add(new Baz());//Disallow
由于我以前从未见过这样做,我认为这可能是不可能的。如果没有,那么为什么不是有充分的理由呢?
我想一个解决方案是让每个必需的类继承一个空接口,然后将列表的类型设置为该接口。这是否会被认为是正常的&#39;练?
答案 0 :(得分:3)
这是不可能的(假设Foo
和Bar
除Object
之外没有共同的超类,也没有公共接口。
原因:
假设有可能:
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
类型没有任何优势。