在Java中,'new Class [] {iface}'和'new Class <?> [] {iface}'是一样的

xia*_*337 5 java

这两个语句在Java中是否相同?

//code 1
Object o1[] = new Class[] {iface};
//code 2
Object o2[] = new Class<?>[] {iface};
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 4

是的,在这种情况下实际上是相同的。

这里

Object o1[] = new Class[] {iface};
Run Code Online (Sandbox Code Playgroud)

您正在使用带有未参数化类型的原始类型Class

这里

Object o2[] = new Class<?>[] {iface};
Run Code Online (Sandbox Code Playgroud)

您使用的是参数化Class类型,但带有通配符。

两者都不影响可以进入数组的内容。

由于您的引用属于 类型Object[],因此您无论如何都不能依赖任何进一步的类型安全,因此它们是等效的。

Vulcan 在评论中提出了一个很好的观点,即原始类型将在编译过程中为您创建警告。您可能想避免这种情况。