是否可以创建类型安全的Java集合,其成员只实现多个接口?

Ben*_*ner 9 java generics

如果我有:

interface A{  void a();  }
interface B{  void b();  }
Run Code Online (Sandbox Code Playgroud)

我可以使用这样的通用方法:

class C {
    <T extends A & B> void c(T t) {
        t.a();
        t.b();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不能像这样拥有一个通用的集合:

class D{
    List<? extends A & B> l;
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建一个扩展A和B的空接口E,并且有一个包含E的List ...但是我宁愿让我的类标记为A和B,而不是必须有E.当有更多的A和B可以以2 ^ n种方式组合时,这就更成问题了.

我宁愿能够动态定义一个类型,作为接口的联合,并让集合识别实现所有接口的对象作为该类型的实例.

有没有办法在Java中这样做?我愿意接受任何类型的工作或破解这一点,以避免创建一个新的界面,并用它标记我的类,这样他们就可以在一个集合中共同生活.或者,如果有人可以为我澄清为什么这是不可能的,那也同样值得赞赏.

Jef*_*rey 9

public class Foo<T extends A & B> {
    private List<T> list;
    //getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)