如果我有:
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中这样做?我愿意接受任何类型的工作或破解这一点,以避免创建一个新的界面,并用它标记我的类,这样他们就可以在一个集合中共同生活.或者,如果有人可以为我澄清为什么这是不可能的,那也同样值得赞赏.
public class Foo<T extends A & B> {
private List<T> list;
//getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |