Intellij警告 - 通用未选中分配

时间:2012-09-24 14:08:17

标签: java generics unchecked

  

可能重复:
  Java Generics, how to avoid unchecked assignment warning when using class hierarchy?

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");
    }

2 个答案:

答案 0 :(得分:3)

听起来你有一个旧版本的IntelliJ。这个警告实际上意味着当IntelliJ支持Java 6时,Java 5.0+和AFAIK会被更改,所以警告就在那里,但没有说“只有JDK 5.0”(它现在支持Java 8)

答案 1 :(得分:0)

为此玩过超类型令牌,我认为如果没有额外的方法从缓存中检索集合并验证其内容的类型是否正确,我认为你不能使这种类型安全。

您的选择是:

  1. 做上述,这似乎很费力
  2. 如果您知道它是正确的,请在客户端代码中取消选中未经检查的强制转换。
  3. 将客户端代码替换为List<?> refObject = cache.getCachedRefObject(cacheKey, List.class);
  4. 这些的唯一类型安全变体是3.,因为它阻止您执行编译器无法证明是类型安全的操作。明显的缺点是你可能想要做一些这些操作。