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