interface I{}
class A implements I{}
class B extends A{}class C<E extends A & I>
{
void test()
{
C<? super B> v;
}
}类型参数 ? super B 不在其限制范围内
C<? super B> v;我觉得E至少应该可以是A或者B,也就是说v = new C<A>和v = new C<B>都不会产生矛盾,为什么不限制范围内?如果只写class C<E extends A>倒是不会有这个问题。百思不得其解,我怀疑是JAVA的泛型有问题 ^
class A implements I{}
class B extends A{}class C<E extends A & I>
{
void test()
{
C<? super B> v;
}
}类型参数 ? super B 不在其限制范围内
C<? super B> v;我觉得E至少应该可以是A或者B,也就是说v = new C<A>和v = new C<B>都不会产生矛盾,为什么不限制范围内?如果只写class C<E extends A>倒是不会有这个问题。百思不得其解,我怀疑是JAVA的泛型有问题 ^
C <? super B> v;忘解释了,这是编译器的错误信息
class A implements I{}
class B extends A{}class C<E extends A & I>
{
void test()
{
C<? super B> v;
}
}这是编译器的错误信息:类型参数 ? super B 不在其限制范围内
C <? super B> v; 我觉得E至少应该可以是A或者B,也就是说v = new C <A>和v = new C <B>都不会产生矛盾,为什么说不在限制范围内? 如果只写class C <E extends A>倒是不会有这个问题。 百思不得其解,我怀疑是JAVA的泛型有问题
这和class C<E extends I >的范围是一样的吧
上限是I A实现了I B继承了A 不都是E能接受的类型么?
也就是说,E限制为A或A的子类而 C <? super B> v;这里应该是限制为B或B的父类吧在 B 继承 A的前提下,限制一:A或A的子类 与限制二:B或B的超类,
明显不匹配
可以编译运行。