7

我正在尝试使用链接为哈希表编写数据结构。当我从嵌套类中删除关键字“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;
        }

    }

谢谢

4

3 回答 3

6

如果将内部Node类声明为static,则该类与外部类相关联SeparateChainingNode那么其实就是SeparateChaining.Node

如果没有static,它将与 的实例相关联,该实例SeparateChaining需要几个类型参数,因此内部Node类也需要这些类型参数。Node那么实际上是SeparateChaining<Key, Value>.Node;在 Java 中,创建泛型数组是不合法的。

于 2013-04-24T18:58:51.253 回答
0

好吧,它是通用的。如果内部类不是静态的,那么类型是SeparateChaining<Key,Value>.Node. 当您添加静态时,它会被视为普通类

于 2013-04-24T18:58:02.393 回答
-1

嵌套类声明中的keyowrdstatic的意思是“我不想引用外部类的对象,非常感谢”。如果你不放static,那么内部类的任何对象都会引用外部类的某个对象。

因此,只能在外部类对象的非静态方法内部创建内部非静态类的对象。

于 2013-04-24T19:00:55.153 回答