最佳实践:如何处理类型安全警告?

时间:2012-01-16 18:21:53

标签: java eclipse

以下语句在Eclipse中引发警告:

Map<String, String> options = DefaultCodeFormatterConstants.getEclipseDefaultSettings();

警告:

Type safety: The expression of type Map needs unchecked conversion to conform to Map<String,String>

处理此警告的最佳做法是什么?我应该添加一个SupressWarning(“未选中”)注释吗?全班?或者只是方法?或者我应该忽略警告?或者我怎么能摆脱这个警告?

4 个答案:

答案 0 :(得分:10)

DefaultCodeFormatterConstants.getEclipseDefaultSettings被正确生成之前,我会考虑为它做一个通用的包装器,并在其内部的局部变量声明中使用注释。还包括一个注释,解释为什么注释是“安全的”。

通常,您希望SuppressWarnings注释的范围尽可能小,并且您希望尽可能少地使用它们。每次使用时,您都应该有一个解释您的推理的评论。

答案 1 :(得分:2)

永久“摆脱”它的唯一方法是升级到仅返回参数化地图的Java 5或更高版本的API。

最简单的做法是“清理它”是包装在自己的类中返回RAW类型的方法,在那里执行转换,并禁止未经检查的警告。这种方式至少可以在一个地方完成,并且您不会在可能意外隐藏“真实”警告的地方使用@SuppressWarnings

答案 2 :(得分:1)

我发现声明行上的这些警告非常烦人。而且毫无意义,因为,在内心深处,我知道有类型擦除,编译器正在抱怨什么都没有。所以我忽略了它们。然而,这可能不是最佳实践,我对其他人如何处理它们非常感兴趣。 Java 7做了一些改进,IIRC,你现在可以去了

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

并保存一些“字符串”的冗余输入并避免警告。

注意 - 我确实注意声明行上的警告。

答案 3 :(得分:1)

如果方法返回原始地图,您唯一能做的就是确保(从文档或代码中)地图确实是Map<String, String>,并忽略警告。编译器无法检查返回的Map是否为Map<String, String>

您应该在尽可能小的范围内忽略警告,否则可以在没有编译器警告的情况下添加其他不安全的代码。