Java 在不丢失类型信息的情况下,获取类列表的类对象的正确方法是什么?

Java 在不丢失类型信息的情况下,获取类列表的类对象的正确方法是什么?,java,generics,generic-collections,unbounded-wildcard,Java,Generics,Generic Collections,Unbounded Wildcard,作为我问题的前言,请注意我知道擦除是什么类型的。我觉得有必要说明这一点,这样有用的答案就不会隐藏在基本的解释中 我想获取类列表的类对象。对于非泛型类型,我会使用类似String.class的类文字,但对于List,即使我可以获得正确的行为,仍然会收到警告,指出我做得不对 根据我的理解,List的类对象应该是class,但即使写下这种类型 Class<List> c = null; 但这通常是不可行的,事实上,我正试图解决一个更大的问题,我需要这种类型的信息 虽然我知道我可以很容易地

作为我问题的前言,请注意我知道擦除是什么类型的。我觉得有必要说明这一点,这样有用的答案就不会隐藏在基本的解释中

我想获取类列表的类对象。对于非泛型类型,我会使用类似String.class的类文字,但对于List,即使我可以获得正确的行为,仍然会收到警告,指出我做得不对

根据我的理解,List的类对象应该是
class
,但即使写下这种类型

Class<List> c = null;

但这通常是不可行的,事实上,我正试图解决一个更大的问题,我需要这种类型的信息


虽然我知道我可以很容易地禁用警告或使用类似的肮脏伎俩,但我想知道获得List类对象的正确方法。

你不可能赢得这场战争


没有
类的实例这样的东西你不能<代码>列表
是类。该类没有泛型类型信息。“我知道我可以扔掉所有关于该类的静态类型信息”这不是“可以”的问题。“我正在试图解决一个更大的问题,我需要那个类型的信息。”然后你需要解释那个问题。如上所述,您不能拥有
。但是您可以有一个例如
类型引用
,但是由于您没有解释您的问题,我们不知道这是否会对您有所帮助。正如@Michael所说的那样。也许这是一个XY问题,“没有什么东西可以扔掉”——是的,即类是(一个子类型)java. UTILIST——通过使用类,我会扔掉它,但是这会产生后续问题。元素类型与我无关,这就是为什么我甚至不考虑类型令牌的原因。答案中你说List.class有类型class的部分走的方向是正确的,但是为什么(class c=List.class)错了呢?它是“错”的,因为它是一个原始类型,通常应该避免,并且没有警告的专门化(在给你警告的任何方面)例如,
List
Class
之间。在你的回答中,你说List.Class有Class类型,但是应该避免使用原始类型。。。你是想说通常不鼓励使用参数化类型的类对象吗?这就是我最后一句话的意思,是的。
Class<List<?>> c = null;
Class<List<?>> l = List.class;
Class<List<?>> l = List<?>.class;
Class<List<?>> l = (Class<List>)List.class;
Class<List<?>> l = (Class<List<?>>)List.class;
List<?> l = new ArrayList<>();
int x = l.getClass();
Class<?> c = List.class;
Class<List<?>> clazz = (Class<List<?>>) (Class<?>) List.class;
Class<List<?>> clazz1 = (Class<List<?>>) (Class<?>) ArrayList.class;
TypeLiteral<ArrayList<?>> typeLiteral =
    new TypeLiteral<ArrayList<?>>() {};