为什么List与List <! - ? - >兼容,但List <list>不与List <list <?>&gt;?

时间:2015-11-09 20:38:48

标签: java generics type-safety

我正在使用非通用代码实现一些接口,我想在没有@SupressWarnings的情况下摆脱警告。但后来我遇到了这样的情况:

public abstract class A {

    public abstract List m1();

    public abstract List<List> m2();

}

public class B extends A {

    @Override
    public List<?> m1() { // the compiler is happy with this
        // whatever
    }

    @Override
    public List<List<?>> m2() { // but not with this
        // whatever
    }

}

为什么呢?在重写方法时,为什么我可以将返回类型从List更改为List<?>,并且不能将List<List>List<List<?>>应用相同的逻辑?

这是编译器给我的消息:

  

返回类型java.util.List<java.util.List<?>>java.util.List<java.util.List>

不兼容

但为什么ListList<?>兼容且List<List>List<List<?>>无关?

我做了几个演示:

0 个答案:

没有答案