1
public class Table<Key extends Comparable<Key>, Value> {

/*
* The purpose of entry is to glue together a key and a value
*
* The class that we use for Key has to implement comparable
* */
private class Entry<Key extends Comparable<Key>, Value> implements Comparable<Entry>
{
    Key key;
    Value value;

    public Entry(Key k, Value v)
    {
        key = k;
        value = v;
    }

    public int compareTo(Entry<Key,Value> entry)
    {
        return key.compareTo(entry.key);
    }
}

private BST<Table.Entry<Key, Value>> tree = new BST<Table.Entry<Key, Value>>();

//must supply public methods for the three operations

public Value lookUp(Key key)
{
    Entry<Key, Value> e = new Entry<Key, Value>(key, null);

    return tree.search(e).value;
}

public boolean insert(Key k, Value v)
{
    return tree.insert(new Entry<Key, Value>(k, v));
}

public boolean delete(Key k)
{
    //we haven't written a delete method for bst yet.
    return tree.delete(new Entry(k, null));
}
}

上記は、私の教授が授業で扱っていたテーブル抽象データ型のクラス宣言です。Javaが次のエラーメッセージを表示する理由を理解しようとしています

生の型で与えられた型引数

ここで変数を宣言すると

private BST<Table.Entry<Key, Value>> tree = new BST<Table.Entry<Key, Value>>();

Javaの生の型とは何ですか? ジェネリック クラスの作成について説明しました。それと関係ありますか?

4

2 に答える 2

4

テーブル クラスにはジェネリック パラメーターが必要ですが、ここでは生の型として参照しています。

プライベート BST<テーブル.Entry> ツリー = 新しい BST<テーブル.Entry>();

次のように、汎用パラメーターを指定する必要があります。

private BST<Table<Key, Value>.Entry<Key, Value>> tree = 
    new BST<Table<Key, Value>.Entry<Key, Value>>();

そして、他の人が指摘しているように、ジェネリックパラメータを1文字の文字として定義するのが標準であるため、K代わりにKey、およびV代わりにValue. これにより、コードの読み取りと理解が大幅に容易になり、実際の型名との混同を避けることができます。

于 2013-03-01T15:15:00.537 に答える
0

Entryは生の型ですが、そうでEntry<Key, Value>はありません。o、コード内のスニペット:

public boolean delete(Key k)
{
    //we haven't written a delete method for bst yet.
    return tree.delete(new Entry(k, null));
}

生のタイプが含まれています。

于 2013-03-01T15:11:52.617 に答える