4

重複の可能性:
Java Generics、クラス階層を使用するときに未チェックの割り当て警告を回避する方法は?

Intellij から以下の警告が表示されます。それを解決する方法がわからない、または解決する必要があるかどうかさえわかりません。警告の詳細には、JDK 5 にのみ適用されるとありますが、私は 6 を使用しています。これに対応する必要があるかどうか疑問に思っています。

警告の原因となるメソッド呼び出し

List<T> refObject = cache.getCachedRefObject(cacheKey, List.class);

呼び出されるメソッド

public  <T> T getCachedRefObject(String objectKey, Class<T> type) {
    return type.cast(refObjectCache.get(objectKey));
}

警告の詳細

Unchecked Assignment
JDK 5.0 only. Signals places where an unchecked warning is issued by the compiler, for example:
    void f(HashMap map) {
        map.put("key", "value");
    }
4

2 に答える 2

3

古いバージョンの IntelliJ を使用しているようです。この警告は実際にはJava 5.0+を意味し、IntelliJがJava 6をサポートしたときにこれが変更されたため、警告はありましたが、「JDK 5.0のみ」とは言いませんでした(現在はJava 8をサポートしています)

于 2012-09-24T14:10:50.537 に答える
1

このためのスーパー タイプ トークンを試してみましたが、キャッシュからコレクションを取得するための追加のメソッドを作成し、それらのコンテンツが正しいタイプであるかどうかを確認することなく、このタイプ セーフを作成することはできないと思います。

オプションは次のとおりです。

  1. 上記を実行すると、面倒に思えます
  2. 正しいことがわかっている場合は、クライアント コードでチェックされていないキャストを抑制します。
  3. クライアントコードを次のように置き換えますList<?> refObject = cache.getCachedRefObject(cacheKey, List.class);

これらのタイプ セーフなバリアントは 3. だけです。これは、コンパイラがタイプ セーフであると証明できない操作を実行できないようにするためです。明らかな欠点は、とにかくこれらの操作のいくつかを実行したい場合があることです。

于 2012-09-24T14:46:54.700 に答える