Java Eclipse-提取局部变量仅替换范围中的所有引用

Java Eclipse-提取局部变量仅替换范围中的所有引用,java,eclipse,refactoring,local-variables,Java,Eclipse,Refactoring,Local Variables,我用的是Eclipse霓虹灯 我在一个过大的方法中有一个重复的方法调用: myObj.getStatus() 例如 其中状态可以在呼叫之间进行内部更新 我只有两个选择 提取局部变量并检查Replace all executes only in scope(方法),这不好(因为getStatus()不是有效的final) 提取局部变量并手动替换每个相关的myObj.getStatus()调用 最后,我提取一个方法,然后提取局部变量,并检查replaceall引用 这是最有效的选择吗?或者只

我用的是Eclipse霓虹灯

我在一个过大的方法中有一个重复的方法调用:

 myObj.getStatus()
例如

其中状态可以在呼叫之间进行内部更新

我只有两个选择

  • 提取局部变量并检查Replace all executes only in scope(方法),这不好(因为
    getStatus()
    不是有效的final)

  • 提取局部变量并手动替换每个相关的
    myObj.getStatus()
    调用

最后,我提取一个方法,然后提取局部变量,并检查replaceall引用

这是最有效的选择吗?或者只能在eclipse中的特定上下文/选定文本中替换?如果不是,这可以被看作是Eclipse重构的增强吗? 编辑

我希望重构到最近的封闭块,类似于JavaScript的
let

实际上,代码并不在同一级别,但eclipse会替换方法中的所有引用

if (myState.equals(STATE_ONE){
  if (myObj.getStatus() == ONE || myObj.getStatus() == TWO ) {
  }
  myObj.changeMe();
}
if (myObj.getStatus() == THREE || myObj.getStatus() == FOUR) {
}
myObj.changeMe2();
...

还有第三种选择:

  • 确保选中复选框“用对局部变量的引用替换所选表达式的所有引用”
  • 单击预览
  • 取消选中不应替换表达式的复选框(在您的情况下,最后两个)

  • 感谢您的回答,我希望重构到最近的封闭块,类似于javascript的Let,也许控制框树中的块/作用域应该有额外的级别。但在您的示例中,所有四个引用都不在if语句体中,因此不在同一块/范围中。在
    myObj.changeMe()
    之前和之后,每个组应该有一个组,但是如何知道
    myObj.changeMe()
    更改了提取变量的值?添加一个增强功能我还有一个关于eclipse的问题
    if (myState.equals(STATE_ONE){
      if (myObj.getStatus() == ONE || myObj.getStatus() == TWO ) {
      }
      myObj.changeMe();
    }
    if (myObj.getStatus() == THREE || myObj.getStatus() == FOUR) {
    }
    myObj.changeMe2();
    ...