Class<Number> = int.class 就会报错。。
不会自动的向上转型吗

解决方案 »

  1.   

    你的语法不对啊Class<Number> ?= int.class ? 的地方缺点东西吧。
      

  2.   

    Class<? extends Number> b = int.class; 这句话不会报错
    报错的是下面这句话
    Class<Number> = int.class
      

  3.   

    大哥,Class<Number>是类型,类型怎么可能赋值。只有变量才能赋值,你少了变量名。
      

  4.   

    Class<Number> b = int.class 
    晕我忘了写。。 加上变量名一样会报错
      

  5.   

    Class<? extends Number> clazz = int.class;

    Class<Integer> clazz = int.class; // 建议以后用Integer.class泛型中,X<Integer>并不是X<Number>的子类型,但是X<Integer>是X<? extends Number>的子类型
      

  6.   

    就是规定,编译器说的很清楚了,Type mismatch: cannot convert from Class<Integer> to Class<Number>,但是Number b=(int)10这样是可以的
      

  7.   

    Class<? extends Number> b = int.class; 这句话不会报错
    报错的是下面这句话
    Class<Number> = int.class
    可以认为
    一个Class<Integer>不是一个Class<Number>
    下面还一个例子,可以帮助理解由于引入了泛型,原来的Class在泛型中都变成了Class<T>,其中T是可以具体化的类型;因为class永远代表一个具体化的类型,所以不允许使用非具体化类型来参数化Class!如: 
    Class<Integer> c1 = Integer.class;      //    OK
        Class<? Extends Number> c2= Integer.class   //OK Integer.class的类型是Class<Integer>而Class<Integer>刚好是Class<? Extends Number>的子类
        Class<?> c3 = List<Integer>.class  //错误,违背上面的原则
        Class<?> c4 = Integer.class;                        //OK
      

  8.   

    这种称为协变性。数组是协变的,像这样的定义是合法的:Number[] nums = new Integer[4];。而泛型是不具有协变性的,像这样的定义是不合法的:List<Number> nums = new LinkedList<Integer>(); 在使用泛型时需要在泛型参数中使用 extends。
      

  9.   

    我们直觉认为集合是不可变的,因此直觉倾向于认同X<Integer>是X<Number>的子类型举例,假设机动车部门提供了一份驾驶员名单给人口登记局,这貌似是合理的。
    我们认为List<Driver> 就是 List<Person>,假设Driver是Person的子类型的话。
    但实际上被提交的只是一份驾驶员的登记簿拷贝而已(意思就是 是可以再改变的),如果不是,人口登记局就可以将那些不是驾驶员的人再加入到这个驾驶员列表中,破坏了机动车部门的记录。