【问题标题】:Why Can't I SuppressWarnings on a Package?为什么我不能抑制包裹上的警告?
【发布时间】:2012-01-18 13:17:25
【问题描述】:

我从 javadoc 中看到 @SuppressWarnings 注释适用于

TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE

目标。为什么它不适用于PACKAGE

我有一些生成的代码,其中包含一些原始类型警告。我希望能够为生成的类添加一个package-info.java 文件(在一个单独的物理目录但相同的 java 包中),它告诉 eclipse 忽略包中生成的类发出的任何原始类型警告。

为什么不支持?是否有其他方法可以抑制整个包中的警告?

【问题讨论】:

  • 你的问题和it一样吗
  • 请检查it
  • @faridmovsumov - 我遇到了与 Oracle“错误”相同的问题。当我可以查找我的 Oracle ID 时,我必须将我的 2 美分添加到该错误报告中。
  • @faridmovsumov - 你提到的 SO 帖子是相关的,但不相同。感谢您的链接!

标签: java annotations


【解决方案1】:

在对旧错误报告(状态 - 已关闭,不会修复)的回复中解释了不允许在包级别抑制警告的原因:Allow SuppressWarnings to be specified at the package level

这些警告实际上表明了潜在的问题 生成的代码。

目前,SuppressWarnings 具有理想的属性 只影响词法嵌套代码。这意味着你 可以立即查看警告是否可能被抑制 你正在阅读的代码。

这个提议会违反这个属性来解决一个不常见的 在大多数情况下可以解决的问题。

该回复中还建议了一些解决方法。

  1. 使用 -source 1.4 和 -target 5 自行编译生成的代码。

  2. 请求使用抑制警告的 javacc 更新版本 或不生成导致警告的代码。

我认为第一个建议,将生成的代码放在自己的项目中,应该适合你。第二个建议看起来更具体到错误报告中的问题。不知道你有没有用javacc。

【讨论】:

  • 似乎这是一个比 Oracle 愿意承认的更常见的问题,基于该错误的 cmets 数量。如果您想使用 1.6 或 1.7 功能,编译到目标版本 1.5 不是一种解决方法......不幸的是,在这种情况下,将代码提取到单独的项目对我来说不是一个可行的解决方案。
  • 这令人沮丧。特别是考虑到静态代码分析的兴起以及使用 SuppressWarnings 来缩小扫描范围。在没有重构生成代码的政治意愿的大型单体项目中,移动项目或在构建中生成代码通常不是一种选择。
【解决方案2】:

好问题。可能这将在未来由 Oracle 修复。

但现在我可以建议您以下内容。将所有生成的代码放到单独的项目中。顺便说一句,这是常见的做法。然后将此项目配置为对警告有耐心。例如在eclipse中你可以打开project properties/Java Compiler/Errors/Warings,选择“enable project specific settings”并禁用所有警告。

【讨论】:

  • 我不认为在这种情况下将生成的代码提取到单独的项目中是一个可行的解决方案。不过,感谢您的建议。
  • “这可能会在未来被 Oracle 修复”让我笑出声来。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多