我正在尝试使用Chaining为哈希表编写数据结构。当我从嵌套类中删除关键字“static”时,我收到错误“无法创建SeparateChaining.Node的通用数组”?在我使用new分配内存到hmap的行上。
使用static关键字它可以正常工作。任何人都可以在这里指出关键字static的重要性和它的区别吗?我正在创建一个对象数组,那么为什么它会在错误(Eclipse)中显示泛型数组?
public class SeparateChaining<Key,Value> {
private int m;
private Node[] hmap;
private int n;
public SeparateChaining()
{
m=5;
n=0;
//error here on removal of static keyword from the node class declaration
hmap=new Node[m];
}
private ____ class Node //works fine with static. Otherwise shows error
{
private Object key;
private Object value;
private Node next;
public Node(Object k, Object v)
{
key=k;
value=v;
}
}
由于
答案 0 :(得分:6)
如果将内部Node
类声明为static
,则该类与外部类SeparateChaining
相关联。事实上Node
就是SeparateChaining.Node
。
如果没有static
,它将与SeparateChaining
的实例相关联,这需要一些类型参数,因此内部Node
类也需要这些类型参数。事实上Node
就是SeparateChaining<Key, Value>.Node
;在Java中,creating an array of generics不合法。
答案 1 :(得分:0)
嗯,这是通用的。如果内部类不是静态的,则类型为SeparateChaining<Key,Value>.Node
。当你添加静态时,它被视为常规类
答案 2 :(得分:-1)
嵌套类声明中的Keyowrd static
意味着“我不想引用外部类的对象,非常感谢”。如果你没有放static
,那么内部类的任何对象都会引用外部类的某个对象。
因此,只能在外部类的对象的非静态方法中创建内部非静态类的对象。