Android Studio说"局部变量是多余的"

The*_*ter 6 java refactoring android android-studio

我收到许多方法的警告local variable is redundant.

这是一个示例方法:

public MyObject getMSListItem(int pos) {
    MyObject li = getItem(pos);
    return li;
}
Run Code Online (Sandbox Code Playgroud)

现在看来,我想,我可以做到这一点来解决它:

public MyObject getMSListItem(int pos) {
    return  getItem(pos);
}
Run Code Online (Sandbox Code Playgroud)

另一个例子:

public String getTeacher(int pos) {
    ffTeacherListItem t = getItem(pos);
    String teacher = t.teacher;
    return teacher;
}
Run Code Online (Sandbox Code Playgroud)

似乎这可能是:

public String getTeacher(int pos) {
    ffTeacherListItem t = getItem(pos);
    return t.teacher;
}
Run Code Online (Sandbox Code Playgroud)

或者按照下面的建议,甚至更好!

public String getTeacher(int pos) {
    return  getItem(pos).teacher;
}
Run Code Online (Sandbox Code Playgroud)

这真的是一个"最佳实践"吗?有一种方式比另一种更好吗?或者只是代码可读性而已?

Sim*_*iak 9

这真的是一个"最佳实践"吗?有一种方式比另一种更好吗?或者只是代码可读性而已?

Simplified说:在你的场景中它没用.这不是不正确但为什么你会这样做:

ffTeacherListItem t = getItem(pos);
String teacher = t.teacher;
return teacher;
Run Code Online (Sandbox Code Playgroud)

当你可以做同样的事情:

ffTeacherListItem t = getItem(pos);
return t.teacher;
Run Code Online (Sandbox Code Playgroud)

或者你也可以这样做:

return getItem(pos).teacher;
Run Code Online (Sandbox Code Playgroud)

以上所有都是相同的,但第二和第三个代码更清晰,你应该总是尝试编写干净的代码,没有无用的行和引用1.还有不成文的规则 - 更少的代码,更少的错误.

1 这是C++等语言的"优势",它没有垃圾收集器,你负责所有你创建的对象和实例(它们从内存中释放等).因此,在决定创建某个Object的新实例之前,您会考虑更多.

  • 但是,要小心.如果您正在链接多个方法调用,例如`getItem().getTeacher().getClass().getStudents()`,并且此行抛出一个`NullPointerException`,您不知道三个中的哪一个返回`null`. (5认同)
  • 问题远不止NPE.对于将来的调试,您将无法查看代码执行情况.声明变量可以让您在出现问题时查看.否则,您必须使用手表双重评估功能.由于我们使用的是Java,这意味着可能出现副作用,这意味着可能会使调试变得更加困难! (2认同)