Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Intellij警告-通用未选中分配_Java_Generics_Unchecked - Fatal编程技术网

Java Intellij警告-通用未选中分配

Java Intellij警告-通用未选中分配,java,generics,unchecked,Java,Generics,Unchecked,可能重复: Intellij在给我下面的警告。不知道如何解决它,甚至不知道我是否需要解决它。警告细节说它只适用于JDK5,而我使用的是JDK5。我想知道我是否需要对此作出回应,如果需要,如何回应 方法调用导致警告 List<T> refObject = cache.getCachedRefObject(cacheKey, List.class); 听起来你有一个旧版本的IntelliJ。这个警告实际上是指Java 5.0+和AFAIK,当IntelliJ支持Java 6时,这个警

可能重复:

Intellij在给我下面的警告。不知道如何解决它,甚至不知道我是否需要解决它。警告细节说它只适用于JDK5,而我使用的是JDK5。我想知道我是否需要对此作出回应,如果需要,如何回应

方法调用导致警告

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

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

已经为此使用了超级类型标记,我认为,如果不使用额外的方法从缓存中检索集合并验证其内容是否为正确类型,就无法确保此类型的安全性

你的选择是:

  • 这样做似乎很费力
  • 如果知道未经检查的强制转换客户端代码是正确的,则禁止该代码
  • 将客户端代码替换为
    List-reobject=cache.getCachedRefObject(cacheKey,List.class)

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

    怎么办?我没有试着通过编译器运行这个,但他似乎正在将
    List
    转换为
    List
    ,没有办法不取消选中。警告仍然存在,但IntelliJ不再说“仅限JDK 5.0”。这可能会让人困惑。OP可能会怀疑在Java6中这不是一个警告。这是在大多数人仍然使用Java1.4.2Ah时使用的,我理解您的回答是“升级IntelliJ应该消除警告”。@millimoose这是一个很好的观点。值得澄清。顺便说一句,在IJ 13中仍然激活。我认为在这种情况下,您无法解析强制类型-您无法使用
    类作为类型标记来具体化
    列表
    。@Nambari这与get-put原则无关。由于原始类型的原因,强制转换未选中。
    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");
        }