Java Eclipse-提取局部变量仅替换范围中的所有引用
我用的是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引用 这是最有效的选择吗?或者只
myObj.getStatus()
例如
其中状态可以在呼叫之间进行内部更新
我只有两个选择
- 提取局部变量并检查Replace all executes only in scope(方法),这不好(因为
不是有效的final)getStatus()
- 提取局部变量并手动替换每个相关的
调用myObj.getStatus()
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();
...