对于Generic外部类,为什么我需要声明嵌套类是静态的?

时间:2013-04-24 18:51:06

标签: java generics nested-class

我正在尝试使用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;
        }

    }

由于

3 个答案:

答案 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,那么内部类的任何对象都会引用外部类的某个对象。

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