Class<? extends Number> a = Integer.class;这样创建是可以的,但是为什么下面的语句就不行了呢?Class<? extends Number>[] b = {Integer.class, Double.class};提示错误为:Cannot create a generic array of Class<? extends Number>还请大家帮助解释下,谢谢了!

解决方案 »

  1.   

    不知道原因,飘过,帮楼主使劲顶一下
                                      HOME_ning(玩物丧志)
      

  2.   

    很简单:目前JDK的版本不支持泛型数组创建!
    这确实是一个遗憾!!
      

  3.   

    我试了下,改成如下可以编译运行:
    Class<? extends Number>[] b ;
    b=new Class[2];
    b[0]=Integer.class;
    b[1]=Double.class;猜测如下:
    1. Class<? extends Number>[] b 声明一Class数组,只接受继承树上Number以下的类的类对象。
    2.创建数组时要求所有元素属于同一类,{Integer.class, Double.class}要求创建Class<? extends Number>[],未满足所有元素属于同一类这一要求。
    3.给数组元素赋值时可以将满足要求的对象赋给数组元素(比如泛型或通过 instanceof检测)。 用下面实例检验了下:
    Class<? super Double>[] b ;
    b=new Class[2];
    b[0]=Number.class;
    b[1]=Object.class;上面只是猜测。
      

  4.   

    又想了下,{Integer.class, Double.class}建立的是CLASS数组,返回给Class<? extends Number>[] b时编译器不通过,编译器未能达到检测声明和实际数组“匹配与否”的程度。