我将向您展示我遵循的过程。
考虑这样的代码:
public class GodClass {
public someInstanceMethodToMove() {
// some code 1
}
public static someStaticMethodToMove() {
// some code 2
}
public static void main(String[] args) {
GodClass c = ...;
c.someInstanceMethodToMove();
GodClass.someStaticMethodToMove();
}
}
创建新类:
public class SingleResponsibilityClass {
}
通过使用 Eclipse 的 Refactor > Move... 重构,可以将静态方法直接移动到 SingleResponsibilityClass,如 Prabhakaran 所述:
public class GodClass {
public someInstanceMethodToMove() {
// some code 1
}
public static void main(String[] args) {
GodClass c = ...;
c.someInstanceMethodToMove();
SingleResponsibilityClass.someStaticMethodToMove();
}
}
public class SingleResponsibilityClass {
public static someStaticMethodToMove() {
// some code 2
}
}
对于实例方法,过程稍微复杂一些。阅读下文。
从someInstanceMethodToMove()中提取一个方法,我们将其命名为someInstanceMethodToMove2():
public class GodClass {
public someInstanceMethodToMove() {
someInstanceMethodToMove2();
}
private someInstanceMethodToMove2() {
// some code 1
}
// ...
}
在原方法中使用SingleResponsibilityClass:
public class GodClass {
public someInstanceMethodToMove() {
someInstanceMethodToMove2(new SingleResponsibilityClass());
}
private someInstanceMethodToMove2(SingleResponsibilityClass obj) {
// some code 1
}
// ...
}
注意:重要的是SingleResponsibilityClass是要移动的实例方法的参数,否则Eclipse不会将它移动到这种类型。
从那里,右键单击someInstanceMethodToMove2(),然后选择Refactor > Move...,在向导中选择SingleResponsibilityClass 类型,然后应用:
public class GodClass {
public someInstanceMethodToMove() {
new SingleResponsibilityClass().someInstanceMethodToMove2();
}
// ...
}
public class SingleResponsibilityClass {
private someInstanceMethodToMove2() {
// some code 1
}
public static someStaticMethodToMove() {
// some code 2
}
}
然后右键SingleResponsibilityClass'someInstanceMethodToMove2()方法和Refactor > Rename它到someInstanceMethodToMove():
公共类上帝类{
公共 someInstanceMethodToMove() {
新 SingleResponsibilityClass().someInstanceMethodToMove();
}
// ...
}
public class SingleResponsibilityClass {
private someInstanceMethodToMove() {
// some code 1
}
public static someStaticMethodToMove() {
// some code 2
}
}
然后右键GodClass'someInstanceMethodToMove()方法和Refactor > Inline:
public class GodClass {
public static void main(String[] args) {
GodClass c = ...;
new SingleResponsibilityClass().someInstanceMethodToMove();
SingleResponsibilityClass.someStaticMethodToMove();
}
}
public class SingleResponsibilityClass {
private someInstanceMethodToMove() {
// some code 1
}
public static someStaticMethodToMove() {
// some code 2
}
}