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と、そのクラスは外部クラスに関連付けられSeparateChainingます。Nodeそれでは実際にご覧SeparateChaining.Nodeください。

がなければstatic、それは のインスタンスに関連付けられSeparateChaining、いくつかの型パラメーターが必要になるため、内部Nodeクラスにもそれらの型パラメーターが必要になります。Node実際にはそうSeparateChaining<Key, Value>.Nodeです。Java では、ジェネリックの配列を作成することは合法ではありません。

于 2013-04-24T18:58:51.253 に答える
0

まあ、それは一般的です。内部クラスが静的でない場合、型はSeparateChaining<Key,Value>.Nodeです。static を追加すると、通常のクラスのように扱われます

于 2013-04-24T18:58:02.393 に答える
-1

ネストされたクラスの宣言のKeyowrdstaticは、「外側のクラスのオブジェクトへの参照を持ちたくないので、よろしくお願いします」という意味です。を置かない場合static、内部クラスのオブジェクトは外部クラスのオブジェクトへの参照を持ちます。

したがって、内部の非静的クラスのオブジェクトは、外部クラスのオブジェクトの非静的メソッド内でのみ作成できます。

于 2013-04-24T19:00:55.153 に答える