bob*_*bob 6 java arrays generics
以下代码给出了"通用数组创建"错误.
public class TestClass<K, V> {
Entry[] entry;
private TestClass() {
entry = new Entry[10]; // <--- this line gives generic array creation error
}
private class Entry {
public Entry() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样,因为类Entry
不是泛型类,并且没有泛型类型的对象.
是因为内部类仍然可以访问泛型类型,即使它不使用任何类型?这是我能想到的最好的,但如果是这样的话,我不明白为什么Java看起来不会看到它不使用泛型类型,因此不是泛型类?
是的,我看过许多关于泛型类型数组的线程,但是没有,我没有找到一个关于内部类的线程.
实际上TestClass<K, V>.Entry
是类型(是的,因为它是一个内部类).您可以通过将其转换为嵌套的静态类来解决此问题:
private static class Entry {
public Entry() {
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这就是JLS在谈论数组创建表达式的内容:
ArrayCreationExpression:
[...]
new ClassOrInterfaceType DimExprs [Dims]
[...]
Run Code Online (Sandbox Code Playgroud)
如果
ClassOrInterfaceType
不能表示可修改的类型(第4.7节),则是编译时错误。否则,ClassOrInterfaceType
可以命名任何命名的引用类型,甚至是抽象类类型(第8.1.1.1节)或接口类型。
仅当以下条件之一成立时,类型才是可更改的:
它指的是非泛型类或接口类型声明。
它是一个参数化类型,其中所有类型参数都是无界通配符(第4.5.1节)。
这是原始类型(第4.8节)。
它是原始类型(第4.2节)。
它是一种数组类型(第10.1节),其元素类型是可修改的。