【问题标题】:No unused variable warning using arrays in eclipse在eclipse中使用数组没有未使用的变量警告
【发布时间】:2013-12-17 11:14:04
【问题描述】:

我使用 Eclipse Kepler 并有一个包含此代码的 java 文件:

String[] arr = new String[] {"abc", "def"};

Eclipse 现在显示警告:

没有使用局部变量arr的值

如果我添加一行,警告就会消失:

String[] arr = new String[] {"abc", "def"};
arr[0] = "ghi";

虽然没有读取数组的任何元素,但 Eclipse 并没有就此发出警告。这种行为是有原因的还是只是一个 Eclipse 错误? (IntelliJ 警告数组没有对其元素的读取访问权限。)

编辑: 我知道数组本身已被使用,但我希望我的 IDE 足够智能,以检查数组中的任何元素是否已被使用,因为数组实际上是其元素的容器。

【问题讨论】:

    标签: java arrays eclipse variables


    【解决方案1】:

    检测结构的使用、读取和写入之间存在差异。 Eclipse 显然只做前者(大概是因为它稍微容易一些),而其他的(例如 IntelliJ)则更复杂,可以推断出更多信息。

    这不是错误;他们只是没有在 Eclipse 中优先考虑静态分析。

    【讨论】:

    • 你是对的,警告实际上是“未使用的变量”,而不是“未读的变量”。所以这不是错误,而是缺少的功能。我希望有一天这将在 Eclipse 中实现。
    【解决方案2】:

    这不是错误。对于编译器,当他看到arr[0] 时,就使用了该值。因为程序首先读取arr[0]的内容,然后创建"ghi"String,然后赋值给arr[0]。在第一种情况下,编译器注意到变量没有被引用,所以它会警告你。

    【讨论】:

    • :) Eclipse 应该更智能:即使使用了 arr[0],arr 也不会影响执行。添加一个布尔值并在多个位置分配值。它仍然会警告你。
    【解决方案3】:

    Eclipse 基本上不够聪明,无法意识到您编写的代码行实际上对程序的行为没有任何影响(通常这对于计算机来说很难确定)。就它而言,如果一个局部变量在声明后没有被引用,那么它就是未使用的。

    【讨论】:

      【解决方案4】:

      在这里

          String[] arr = new String[] {"abc", "def"};
          arr[0] = "ghi";  // you are writing to arr
      

      但从来没有读过。现在这两个条件都是正确的。 arr在代码中使用,从不阅读arr

      然后IntelliJ IDEA 会说你没有在这里阅读arr,而 Ecpise 从不显示先前的警告。那不是错误。这两个是IntelliJ IDEAEclipse 的功能。

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-02
        相关资源
        最近更新 更多