【问题标题】:How do I compile with -Xlint:unchecked?如何使用 -Xlint:unchecked 进行编译?
【发布时间】:2012-01-03 04:28:11
【问题描述】:

我在编译代码时收到一条消息:

Note: H:\Project2\MyGui2.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

如何使用-Xlint:unchecked 重新编译?

【问题讨论】:

  • 你是在命令行编译吗?如果是这样,请将-Xlint:unchecked 添加到您正在执行的命令行中,正如消息所示。
  • 取决于你如何运行你的代码。它来自 Eclipse 吗?命令行?
  • 你做了什么?我从未见过此错误消息...

标签: java compiler-errors unchecked


【解决方案1】:

使用 -Xlint 编译的其他方式:通过命令行取消选中

javac abc.java -Xlint:unchecked

它将显示未经检查和不安全的警告。

【讨论】:

    【解决方案2】:

    以下是指定 Gradle 编译器参数的更简洁的方法:

    compileJava.options.compilerArgs = ['-Xlint:unchecked','-Xlint:deprecation']
    

    【讨论】:

    • 这可能是 shorter 但它不是 cleaner。一方面,它覆盖了其他地方设置的现有选项。另一方面,它不会影响测试,如 tarn 答案下方的 cmets 所述。不要这样做,使用 xianlinbox 的答案。
    【解决方案3】:

    对于 Android Studio,将以下内容添加到 allprojects 块内的顶级 build.gradle 文件中

    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" 
    }
    

    【讨论】:

      【解决方案4】:

      在gradle项目中,可以通过以下方式添加这个编译参数:

      gradle.projectsEvaluated {
          tasks.withType(JavaCompile) {
              options.compilerArgs << "-Xlint:unchecked"
          }
      }
      

      【讨论】:

      • 在最近的 gradle 版本中,任务类型 Compile 已重命名为 JavaCompile,所以它是 tasks.withType(JavaCompile) { ... }
      • 我要补充一点,这应该放在allprojects { // ... }
      • 在所有其他选项中,这是唯一对我有用的。非常感谢
      【解决方案5】:

      仅供参考,这些设置已针对 IntelliJ 15 进行了更改,新的和改进的更深埋葬!

      现在是:文件 > 其他设置 > 默认设置 > '构建、执行、部署' > 编译器 > Java 编译器

      并且在附加命令行参数中,和之前一样,写“-Xlint:unchecked”。

      【讨论】:

        【解决方案6】:

        对于 IntelliJ 13.1,转到 文件 -> 设置 -> 项目设置 -> Compiler -> Java Compiler,在右侧,Additional command line parameters 输入 "-Xlint:unchecked"

        【讨论】:

        • 谢谢。但对于 13.1 社区版,它位于文件 - 设置 - 编译器 - Java 编译器,该字段位于底部。
        • 对于 14.0.3,此设置页面已移至:文件 - 设置 - 构建、执行、部署 - 编译器 - Java 编译器。
        • 不是在 AndroidStudio 上,似乎为 any 编译器提供了编译器选项,而不仅仅是 Java。编辑 build.gradle 确实有效。
        • Android Studio 中可以在 File -> New Project Settings -> 下找到编译器选项新项目的设置。然而,它们似乎适用于现有项目。
        【解决方案7】:

        gradle还有另一种方式:

        compileJava {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
        

        【讨论】:

        • 这不会影响例如测试。
        • 对于 Android Studio,这似乎需要一些不同的方法:tasks.withType(JavaCompile) { options.compilerArgs &lt;&lt; "-Xlint:unchecked" &lt;&lt; "-Xlint:deprecation" }
        • 对于 Android Studio 2.1.3 将此添加到项目 build.gradle allprojects { repositories { jcenter() } gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs &lt;&lt; "-Xlint:unchecked" &lt;&lt; "-Xlint:deprecation" } } }
        【解决方案8】:

        在命令行中为 javac 指定它:

        javac -Xlint:unchecked

        或者如果你使用 Ant 修改你的 javac 目标

          <javac ...>
            <compilerarg value="-Xlint"/>
          </javac> 
        

        如果您使用的是 Maven,请在 maven-compiler-plugin 中进行配置

        <compilerArgument>-Xlint:unchecked</compilerArgument>
        

        【讨论】:

        • 我有 maven 3,模型 4.0 -- &lt;compilerArgument&gt; 位于 &lt;configuration&gt; 之下,不在 `' 元素内。 真傻。
        • 那么在 AOSP 中编译呢?我应该在 Android.mk 文件中添加什么?
        【解决方案9】:

        如果您使用像 NetBeans 这样的 IDE,您可以在项目的属性中指定 Xlint:unchecked 编译器选项。

        只需进入项目窗口,右键单击项目,然后单击Properties

        在出现的窗口中搜索Compiling 类别,并在标有Additional Compiler Options 的文本框中设置Xlint:unchecked 选项。

        因此,每次编译项目时,该设置都将保持设置。

        【讨论】:

          【解决方案10】:

          在 CMD 中,写:

          javac -Xlint:unchecked MyGui2.java
          

          它将显示未检查或不安全操作的列表。

          【讨论】:

            【解决方案11】:

            我知道这听起来很奇怪,但我很确定这是你的问题:

            在 MyGui.java 中的某个地方,您正在使用通用集合而没有指定类型。例如,如果您在某处使用 ArrayList,则您正在这样做:

            List list = new ArrayList();
            

            什么时候你应该这样做:

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

            【讨论】:

            • 非常感谢,这对我有帮助!
            • 这甚至没有尝试回答给出的问题。
            猜你喜欢
            • 2012-09-09
            • 2012-06-05
            • 2015-12-21
            • 2015-06-04
            • 1970-01-01
            • 2011-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多