所以,我明白那以下不起作用,但是为什么不起作用?为什么我不能在具有多个边界的类型参数中使用类型参数?
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()
方法给我一个编译错误,“不能指定任何附加绑定适配器<Ë>当第一结合是一种类型的参数”(在Eclipse),或“类型参数不能被随后的其他边界” (在IDEA中),请选择。
显然你只是不允许使用类型参数I
那里,在&
之前,就是这样。 (并且在你问之前,如果你切换他们,它是行不通的,因为不能保证I
不是一个具体的类。)但是为什么不呢?我浏览了Angelika Langer的常见问题,无法找到答案。
通常,当某些泛型限制看起来是任意的时,这是因为您已经创建了类型系统实际上不能实施正确性的情况。但我不明白什么情况会打破我在这里要做的事情。我想说也许它与类型擦除后方法调度有关,但只有一个方法add()
,所以它不像有任何歧义...
有人可以证明我的问题吗?
实际上,如果多个边界点是要控制擦除,那完全有意义,因为我只是要擦除Object。 – 2008-10-13 13:11:46