Intellij 警告 - 通用未经检查的分配

Edg*_*ase 5 java generics unchecked

可能的重复:
Java泛型,使用类层次结构时如何避免未经检查的赋值警告?

Intellij 向我发出以下警告。不确定如何解决它,或者即使我需要解决它。警告详细信息说它仅适用于 JDK 5,而我使用的是 6。我想知道是否需要对此做出回应,如果需要,如何回应?

方法调用导致警告

List<T> refObject = cache.getCachedRefObject(cacheKey, List.class);
Run Code Online (Sandbox Code Playgroud)

被调用的方法

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

警告详情

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");
    }
Run Code Online (Sandbox Code Playgroud)

mil*_*ose 2

为此使用了超级类型令牌,我认为如果不使用额外的方法从缓存中检索集合并验证其内容是否具有正确的类型,就无法使此类型安全。

您的选择是:

  1. 完成上述操作,看起来很费力
  2. 如果您知道客户端代码中未经检查的强制转换是正确的,请禁止它。
  3. 将客户端代码替换为List<?> refObject = cache.getCachedRefObject(cacheKey, List.class);

其中唯一的类型安全变体是 3.,因为它阻止您执行编译器无法证明类型安全的操作。明显的缺点是您可能无论如何都想执行其中一些操作。