4

質問はこれに似ています @SuppressWarnings("unchecked") に中間変数を使用する必要があるのはなぜですか? 、しかし、私はそれから解決策を得ることができませんでした.

演習として、ハッシュ テーブル構造をゼロから構築しています。そこで、HashTableDemo を補助するクラス LinkedListDemo を作成しました。LinkedListDemo クラスのテストはまったく問題ありません。特に、次のサブルーチンは実行時に ClassCastException エラーを引き起こしません。

    public LinkedListDemo<S, T> reverse() {

        if (count == 0)
            return null;

        @SuppressWarnings("unchecked")
        S[] keys = (S[]) new Object[count];
        @SuppressWarnings("unchecked")
        T[] vals = (T[]) new Object[count];

        ListNode<S, T> runner = head;
        for (int k = 0; k < count; k++) {

            keys[k] = runner.pair.getKey();
            vals[k] = runner.pair.getValue();

            runner = runner.next;

        }

        ArrayUtils.reverse(keys);
        ArrayUtils.reverse(vals);

        return new LinkedListDemo<S, T>(keys, vals);

    }

一方、私の HashTable クラスでは次のようになります。

public class HashTableDemo<S, T> {

    private LinkedListDemo<S, T>[] table = (LinkedListDemo<S, T>[]) new Object[10]; 

// more code...

}

Java の HashMap クラスがこの問題を回避する方法、および/またはどのように回避できるかを知っている人はいますか? 上記のリンクで提案されているように、コンストラクター内に中間変数を作成しようとしましたが、機能しませんでした。

4

1 に答える 1