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的泛型有问题                ^

解决方案 »

  1.   

    我没明白你说什么 不过JAVA不支持多继承 那也就是说 他这里是个接口(你那个意思是 实现A & I就行吧?) 你可以尝试下 我还真没弄过这么麻烦的另外 JAVA的泛型很有用 但不是有问题 用的要得当些
      

  2.   

    类型参数 ? super B 不在其限制范围内 
          C <? super B> v;忘解释了,这是编译器的错误信息
      

  3.   

    重发一下,刚才少字了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的泛型有问题
      

  4.   

    我觉得class C<E extends A & I>这写法没必要吧
    这和class C<E extends I >的范围是一样的吧 
    上限是I A实现了I B继承了A 不都是E能接受的类型么?
      

  5.   

    纳闷中   为什么要弄能这样   C<? super B> v;   
      

  6.   

    E extends A & I因为 A implements I , E extends A & I 等效于 E extends A
    也就是说,E限制为A或A的子类而 C <? super B> v;这里应该是限制为B或B的父类吧在 B 继承 A的前提下,限制一:A或A的子类  与限制二:B或B的超类,
    明显不匹配
      

  7.   

    检查一下你的jdk版本,建议使用最新的jdk6u18,我这里测试没有问题。
    可以编译运行。