import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
Class clazz = A.class;   //接口可以
Class zList1 = List.class; //没问题
Class<A> zList2 = List<A>.class;  //问题所在

List<? extends A> list = new ArrayList<A>();
list.getClass(); //可以
}}
interface A
{
void show();
}请问List集合加上范型后为什么不能用.class得到相应的Class对象了?
本身接口和集合都是可以直接用.class得到Class对象的.请解释~谢.

解决方案 »

  1.   

    会为会因为是经过编译处理后,JVM里没有范型的原因
      

  2.   

    Class<A> zList2 = List<A>.class;  //问题所在你的A是什么类型呢?
    泛型不管怎么泛,总是有种类型的吧?
    你的A没有定义,肯定报错的,就像没有定义class一样
      

  3.   

    类型不匹配吧。
    List<A>.class 并不是个Class<A>还有List<A>是什么意思?List<A>只是个声明,不能放右边吧。好像没这种写法。一般都是List<A> l = new ArrayList<A>();等等写法。Class<A> zList3 = (Class<A>) new ArrayList<A>().getClass();这样倒是可以个人看法而已!
      

  4.   

     Class是泛型的类型吗?
      

  5.   


    不想通过实例的getClass()方法得到对象,对于List<A> 请问怎么解决?
      

  6.   

    JVM对没限定(界限)的范型,就转换成Object 
    有限定,就用限定.
      

  7.   

    类和接口等才能用.class,对象,引用等只能用.getClass()下面这样写也是可以的:
    Class<A> zList2 = (Class)List.class;List<A>只是个声明,泛型声明好像都没有方法和属性吧(没有.class(),没有.getClass())List<A> l = new ArrayList<A>;//List<A>什么属性也没有,跟List是不同的。但 l 就可以用l.getClass()了
      

  8.   

    Class<A> zList2 = List<A>.class;  //问题所在Class<List> zList2 = List.class; 
      

  9.   

    Clas<A>是这个类
    List<A>这个泛型<A>代表的是你的Class类或Object
      

  10.   

    可以参考Thinking in java 4th的Generics一章的The mystery of erasure一节
    这本书的电子版可以到我博客里参考
      

  11.   

    是不是就像一楼所说的,是编译后无泛型信息的关系:
    假设 List<A>.class 语句合法,那么该语句所产生的效果和List.class相同(类对象并不会因为泛型的关系而有所改变),在这种情况下,允许前者合法对程序编写不但没有什么助益,反而会造成一定的混淆,因此编译器采取认定其为非法的策略~
      

  12.   

    泛型总是有种类型的吧,Clas <A>是这个类 List <A>是个泛型 类型不匹配
      

  13.   

    是不是就像一楼所说的,是编译后无泛型信息的关系: 
    假设 List <A>.class 语句合法,那么该语句所产生的效果和List.class相同(类对象并不会因为泛型的关系而有所改变),在这种情况下,允许前者合法对程序编写不但没有什么助益,反而会造成一定的混淆,因此编译器采取认定其为非法的策略~
      

  14.   


    //举个实例
    import java.util.*;
    public class ArrayList1{
    public static void main(String [] args)
    {
    ArrayList<Integer> ary=new ArrayList<Integer>();
         ary.add(9);
         ary.add(44);
         ary.add(4);
             int min=ary.get(0);
             int max=ary.get(ary.size()-1);
             
             for(Integer i:ary){
              if(max<i)
              {
              max=i;
              }
              if(min>i){
              min=i;
              }
             
             }
             System.out.println("min:  "+min);
             System.out.println("max:  "+max);
         
     }}