分为三类:
class A{
}
class B{
}
class Gen<T, V extends T>{
}
以下程序将无法编译:
class Main{
public static void main(String[] args){
Gen<A, B> g;
}
}
因为它V必须与它相同T或它的子类。
现在有这段代码:
class Main{
public static <T, V extends T> void qq(T x, V y){
}
public static void main(String[] args){
qq(new A(), new B());
}
}
我希望它不会以相同的方式编译,因为它B不继承自A,但它仍然工作得很好。为什么?
在
Gen<A, B> g您明确指出T=A并且V=B- 由于显而易见的原因,这无法编译,类型不兼容。在您没有明确
qq(new A(), new B())指定类型的情况下,编译器会进行类型推断,即 找到合适的。在这种情况下,我发现and 。qqT=ObjectV=B如果您明确指定 types
Main.<A, B>qq(new A(), new B()),您将收到相同的错误。