【发布时间】:2015-02-12 01:56:45
【问题描述】:
我有一个尝试的示例代码。该代码似乎没有编译错误。为什么它使用静态嵌套类节点?当我删除Node 嵌套类中的static 并编译时,错误显示private Node[] next = new Node[R]; 中的create generic array。到底发生了什么?
public class TrieST<Value> {
private static final int R = 256; // extended ASCII
private Node root; // root of trie
private int N; // number of keys in trie
// R-way trie node
private static class Node {
private Object val;
private Node[] next = new Node[R];
}
public TrieST() {
}
}
【问题讨论】:
-
首先,您知道为什么不允许使用泛型数组吗? (例如
new ArrayList<String>[5];显示此错误) -
你能解释一下为什么添加static时没有这个错误吗?
-
因为您使用静态创建:
Node[] next = new Node[R]并且使用非静态内部类创建一个与外部类实例关联的节点,该实例具有通用类型。并且禁止创建泛型数组。 -
请注意,“静态内部”在术语上是矛盾的。嵌套类是要么静态或内部。
标签: java