dev*_*ium 4 java eclipse refactoring intellij-idea
考虑一个包装类W,包装C,这意味着对于大部分属性C,有一个记者的属性A上W,它的逻辑包括不外乎代表团更多C的A.使用下图所示的草图可以最精确地描述这种情况:
class W {
private C c;
getX() { return c.getX(); }
getY() { return c.getY(); }
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我已经决定,我wan't摆脱getX(),我宁愿无论是作为一个过渡步骤,把C c为公众,为所有调用的代码W做一个w.c.getX()或w.c.getY()或可选择地把创建W.getC(),并有所有的呼叫getX(),并getY()通过它去.
这一切都归结为"无封装"的重构.在Eclipse或Intellij中是否有任何执行这项急需的任务?
使用IntelliJ,您可以使用Remove Middleman重构.
考虑:
之前:
public class W {
private C c;
Object getX() { return c.getX(); }
Object getY() { return c.getY(); }
}
public class C {
private Object x;
private Object y;
public Object getX() {
return x;
}
public Object getY() {
return y;
}
}
public class UsesW {
W w;
public void useW() {
Object x = w.getX();
Object y = w.getY();
}
}
Run Code Online (Sandbox Code Playgroud)
将光标放在声明上W.c.然后选择Refactor | 删除米德曼.结果让你到达你想要的地方的一半:
之后:
public class W {
private C c;
public C getC() {
return c;
}
}
/* class C is unchanged */
public class UsesW {
W w;
public void useW() {
Object x = w.getC().getX();
Object y = w.getC().getY();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以介绍类型的变量C在UsesW.将光标放在其中一个调用上w.getC()并将其内联:Refactor | 内联...(Ctrl-Alt-N是默认快捷方式),选择内联所有实例.它会让你这样:
public class UsesW {
W w;
public void useW() {
final C c = w.getC();
Object x = c.getX();
Object y = c.getY();
}
}
Run Code Online (Sandbox Code Playgroud)
最后W完全摆脱你可能比我更好的答案,但现在这项工作变得更加容易.
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |