4

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

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+ 和 AFAIK,当 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 回答