import java.util.*;
class Outer { public static <E extends Number> List< ? super E> process( List<E> nums){

return nums;}
public static void main(String[] args) { ArrayList<Integer> input=null;
List<Number> output=null;
output=process(input);

}}
public static <E extends Number> List< ? super E> process( List<E> nums)方法中List< ? super E> 返回类型是什么 为什么编译错误 
这和 Anmail fun() 返回个new Dog()有什么区别

解决方案 »

  1.   

    java还可以这样写。
         不清楚
      

  2.   

    ? super E 表示E的父类List<? super E>就表示List里的内容必须是E的父类
      

  3.   

    是不是就是说内容必须是Number的子类?
      

  4.   

    这个问题其实很简单,因为process方法返回的是List<? super Integer>类型,而output被定义为List<Number>类型,前者是不能直接赋值给后者的。为什么呢?尽管Number是Integer的父类,但同时Object也是Integer的父类,所以一个List<Object>可以赋值给List<? super Integer>类型的变量,换句话说,一个List<Object>也是一个合法的List<? super Integer>,这时候如果再把这个包含Object类型的List<? super Integer>类型赋值给List<Number>是显然不可以的。
      

  5.   

    如果改成这样
    output = (List<Number>)process(input);
    那就可以通过编译