所以,我知道以下不起作用,但为什么不起作用?
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()
方法给了我一个编译错误,“当第一个绑定是类型参数时,不能指定任何额外的绑定 Adapter<E>”(在 Eclipse 中),或者“类型参数不能被其他边界跟随”(在 IDEA 中),请选择.
显然,您只是不允许在I
之前使用 type 参数,仅&
此而已。(在你问之前,如果你切换它们是行不通的,因为不能保证这I
不是一个具体的类。)但为什么不呢?我浏览了 Angelika Langer 的常见问题解答,但找不到答案。
通常,当某些泛型限制看起来是任意的时,这是因为您已经创建了类型系统实际上无法强制正确性的情况。但我不知道什么情况会破坏我在这里尝试做的事情。我会说也许它与类型擦除后的方法调度有关,但只有一种add()
方法,所以它不像有任何歧义......
有人可以为我演示这个问题吗?