【问题标题】:Local variable is redundant JetBrains IDEs (e.g. IntelliJ IDEA)局部变量是冗余的 JetBrains IDE(例如 IntelliJ IDEA)
【发布时间】:2017-03-13 20:41:42
【问题描述】:
public static double getAmount(){
    Scanner reader = new Scanner(System.in);
    System.out.println("random text");
    double amount;
    return (amount = reader.nextDouble());
}

IntelliJ 在上面的代码中给了我这个警告:

局部变量“数量”是多余的

为什么?

【问题讨论】:

  • 旁注:请不要调用执行复杂操作的方法,例如 IO getSomeName() - 由于 JavaBeans 约定,我们被训练期望具有此类名称的方法便宜(通常是副作用-free) 访问字段。 (同样适用于isSomething()hasSomething())- 最好使用readSomeName() 这样的名称。不要让其他程序员(包括你未来的自己)感到惊讶。

标签: java intellij-idea jetbrains-ide


【解决方案1】:

在方法体中(在 { 和 } 之间)声明的任何变量都将在该方法结束时被删除(垃圾收集)。 (除非您将其分配给未在方法主体中创建的东西)

您在运行时创建了变量“数量”:

 double amount;

此时您已经创建了变量,但从未为其赋值。 你第一次使用这个变量是在你的 return 语句中:

return (amount = reader.nextDouble());

你应该做的是将变量分配在与声明相同的行:

public static double getAmount(){
    Scanner reader = new Scanner(System.in);
    System.out.println("random text");
    double amount  = reader.nextDouble();
    return amount;
}

或者,更好的是,根本不使用该变量(尽管它可能会提高代码的可读性,在这种情况下,可以提出一个有效的点来保留它):

public static double getAmount(){
        Scanner reader = new Scanner(System.in);
        System.out.println("random text");

        return reader.nextDouble();
    }

为什么 Intellij 会警告我?
Intellij 只是告诉你,你的变量最终没有被使用(它不是),所以删除变量声明是安全的。

不过,如果您将鼠标悬停在出现在代码行开头的小灯泡上,Intellij 也应该像我刚才所做的那样为您提供解决方案。 一个例子:

【讨论】:

  • 有时保留变量会使事情更容易调试,但对每个人来说都是自己的
【解决方案2】:

它告诉你,你可以简单地返回 reader.nextDouble() 并且你不需要变量 amount 来达到这个目的。

【讨论】:

    【解决方案3】:

    因为你没有用它做任何事情。代码可以简化为:

    public static double getAmount(){
        Scanner reader = new Scanner(System.in);
        System.out.println("random text");
        return reader.nextDouble();
    }
    

    【讨论】:

      【解决方案4】:

      尝试为冗余局部变量关闭检查模式。或者你可以简单地做:

      return reader.nextDouble();
      

      【讨论】:

        【解决方案5】:

        你可以这样做

         return reader.nextDouble();
        

        那个变量声明和赋值占用了内存。

        【讨论】:

        • 或许不是。取决于即时编译器如何处理它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多