Class<?>在Java中是什么意思?

2022-08-31 07:03:47

我的问题如上所述。对不起,这可能是一个重复,但我找不到最后的例子。<?>

为什么不直接用作参数?Class


答案 1

Class是一个可参数化的类,因此您可以使用语法,其中是一个类型。通过编写 ,您正在声明一个可以是任何类型的对象(是通配符)。类型是包含有关类的元信息的类型。Class<T>TClass<?>Class?Class

通过指定泛型类型的特定类型来引用泛型类型始终是一种很好的做法,通过使用您尊重这种做法(您知道它是可参数化的),但您并没有将参数限制为具有特定类型。Class<?>Class

有关泛型和通配符的参考:http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

关于对象和反射(Java语言用于自我内省的特性)的参考:https://www.oracle.com/technetwork/articles/java/javareflection-1536171.htmlClass


答案 2

这是一头野兽。它经常导致混淆和错误,因为当你第一次看到它时,你就会开始相信,它是任何java类型的通配符。这是..事实并非如此。 是未知的类型,细微而令人讨厌的差异。<?><?><?>

当您将其与 一起使用时,这不是问题。两行都工作和编译:Class

Class anyType = String.class;
Class <?> theUnknownType = String.class;

但是 - 如果我们开始将其与集合一起使用,那么我们会看到奇怪的编译时错误:

List<?> list = new ArrayList<Object>();  // ArrayList<?> is not allowed
list.add("a String");                    // doesn't compile ...

我们不是一个集合,它只适用于任何类型的对象。它只能存储一种类型:神秘的“未知类型”。当然,这不是一个真正的类型。List<?>