代码之家  ›  专栏  ›  技术社区  ›  The Scientific Method

忽略警告的后果是什么:java中未经检查的转换

  •  1
  • The Scientific Method  · 技术社区  · 6 年前

    我知道为什么会收到警告(即将原始类型分配给参数化类型),但如果忽略警告,我无法确切地得到可能的序列。

    List list = new ArrayList();           
    List<Integer> iList = list;     // warning: unchecked conversion
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Stephen C    6 年前

    运行时的(唯一)结果是由于 ClassCastException 直接或间接地 1. .

    另一个后果是允许错误 应该 在编译时被检测和纠正,以继续进行测试,也许在生产中,成本和后果可能会明显恶化。

    尽管忽略这些警告是个坏主意,但错误地抑制它们可能更糟。

    你错误地压制他们是什么意思?

    @SuppressWarning 实际会导致运行时异常或其他(实际)问题的警告的注释。添加 @抑制警告 注释只是为了让编译器“闭嘴”是一种危险的习惯。


    1-例如,如果你抓住了一个 类异常

        2
  •  2
  •   Ravindra Ranwala    6 年前

    ClassCastException 在运行时。编译器生成的强制转换可能在运行时失败。这将违反泛型类型系统提供的基本保证。实际上,你的代码不是类型安全的。看看这个。

    List list = new ArrayList();           
    List<Integer> iList = list;
    list.add("wrong");
    for (Integer integer : iList) {
        System.out.println(integer);
    }
    

    这是运行时出现的错误。

    java.lang.String 不能强制转换为 java.lang.Integer

        3
  •  1
  •   Eran    6 年前

    ClassCastException 如果你期待 List 包含一种类型的元素,而它包含不相关类型的元素。

    类异常

    List list = new ArrayList();    
    list.add("something");       
    List<Integer> iList = list;
    Integer i = iList.get(0);