有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取泛型类型的类?

如何创建表示泛型对象的Class

List<String> list = new List<String>();
Class c1 = list.class;
Class c2 = Class.forName(???); // <- how?
assert c1 == c2;

共 (4) 个答案

  1. # 1 楼答案

    这对我很有用: (Class<List<MYTYPE>>) Class.forName("java.util.ArrayList")

    因此,对于您的情况:

    List<String> list = new List<String>();
    Class c1 = list.class;
    Class c2 = (Class<List<String>>) Class.forName("java.util.ArrayList")
    assert c1 == c2;
    
  2. # 2 楼答案

    类对象不是特定于满足其类型参数的特定类:

    assert (new ArrayList<String>()).getClass() == (new ArrayList<Integer>()).getClass();
    

    它是完全相同的对象,不管它是如何键入的

  3. # 3 楼答案

    由于type erasure的原因,在运行时不存在泛型信息,因此您不能这样做

    您的代码可以这样编写:

    List<String> list = new ArrayList<String>();
    Class c1 = list.getClass();
    Class c2 = Class.forName("java.util.ArrayList");
    System.out.println(c1 == c2); // true
    
  4. # 4 楼答案

    Class不表示一般类型。合适的类型是java.lang.reflect.Type,尤其是ParameterizedType。你可以通过反射得到这些物体,也可以自己制作

    (请注意,泛型是一种静态类型功能,因此并不真正适用于运行时对象。静态类型信息碰巧保存在类文件中,并通过反射对象上的反射API公开。)