是什么导致 javac 发出“使用未经检查或不安全的操作”警告

新手上路,请多包涵

例如:

 javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

原文由 toolbear 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

如果您使用没有类型说明符的集合(例如, Arraylist() 而不是 ArrayList<String>() ),则会出现在 Java 5 及更高版本中。这意味着编译器无法检查您是否使用 泛型 以类型安全的方式使用集合。

要消除警告,您需要具体说明您在集合中存储的对象类型。所以,而不是

List myList = new ArrayList();

利用

List<String> myList = new ArrayList<String>();


在 Java 7 中,您可以使用 Type Inference 来缩短泛型实例化。

 List<String> myList = new ArrayList<>();

原文由 Bill the Lizard 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您按照它的建议进行操作并使用“-Xlint:unchecked”开关重新编译,它将为您提供更详细的信息。

除了使用原始类型(如其他答案所述),未经检查的强制转换也可能导致警告。

使用 -Xlint 编译后,您应该能够重新编写代码以避免警告。这并不总是可行的,尤其是当您要与无法更改的遗留代码集成时。在这种情况下,您可以决定在您知道代码正确的地方抑制警告:

 @SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}

原文由 Dan Dyer 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题