所以,我的理解是以下不工作,但为什么不工作?
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));
}
}
Run Code Online (Sandbox Code Playgroud)
该add()
方法给出了一个编译错误,"当第一个绑定是一个类型参数时,无法指定任何其他绑定的适配器<E>"(在Eclipse中),或者"类型参数不能跟随其他边界"(在IDEA中),请选择.
很明显,你只是不允许在I
那之前使用type参数&
,那就是那个.(而且在你问之前,如果你改变它们就行不通,因为不能保证它I
不是一个具体的类.)但为什么不呢?我查看了Angelika Langer的常见问题解答并找不到答案.
通常,当某些泛型限制看似随意时,这是因为您创建了一种类型系统无法实际执行正确性的情况.但我不知道哪种情况会破坏我在这里要做的事情.我可能会说它可能与类型擦除后的方法调度有关,但是只有一种add()
方法,所以它不像是有任何歧义......
有人能为我证明这个问题吗?
你是如何做这项工作的:
public class Frankenstein<T extends IHuman, IMonster>{
}
Run Code Online (Sandbox Code Playgroud)
没有制作
public interface Weirdo extends Ihuman, IMonster{
}
Run Code Online (Sandbox Code Playgroud)
编辑
为什么这不起作用?
public <T> void mapThis(
Class<? extends MyClass<T>> key, Class<? extends T & IDisposable> value) {
}
Run Code Online (Sandbox Code Playgroud)
我将编译器消息标记Class<? extends T & IDisposable>
为错误.