【发布时间】:2010-09-16 20:47:57
【问题描述】:
所以,我了解以下行不通,但为什么行不通?
interface Adapter<E> {}
class Adaptulator<I> {
<E, A extends I & Adapter<E>> void add(Class<E> extl, Class<A> intl) {
addAdapterFactory(new AdapterFactory<E, A>(extl, intl));
}
}
add() 方法给了我一个编译错误,“当第一个绑定是类型参数时,不能指定任何额外的绑定适配器
很明显,您只是不允许在& 之前使用类型参数I,仅此而已。 (在你问之前,如果你切换它们是行不通的,因为不能保证I 不是一个具体的类。)但为什么不呢?我浏览了 Angelika Langer 的常见问题解答,但找不到答案。
通常,当某些泛型限制看起来很随意时,这是因为您创建了类型系统实际上无法强制正确性的情况。但我不知道什么情况会破坏我在这里尝试做的事情。我会说也许它与类型擦除后的方法调度有关,但只有一个add() 方法,所以它不像有任何歧义......
有人可以为我演示一下这个问题吗?
【问题讨论】:
标签: java generics constraints