我有一个名为FirstClass
的类,它有一个超过100行的方法。现在我正在编写一个名为SecondClass
的新类,它的方法与FirstClass
中除一行之外的方法完全相同。
我可以复制firstMethod()
的内容并将其粘贴到secondMethod()
中,然后更改不同的行。但这对我来说似乎并不合适。
如何在不复制/粘贴代码的情况下处理这种情况?
无法更改FirstClass。
public class FirstClass {
public void firstMethod() {
//100 lines of code
}
}
public class SecondClass {
public void secondMethod() {
// Copy/paste the content of firstMethod() from above?
}
}
答案 0 :(得分:1)
使用带有公共代码的抽象类并对其进行扩展,然后通过调用super方法并执行不同的代码来覆盖方法:
public class CommonClass {
public void method() {
// 100 lines of code
}
}
public class FirstClass extends CommonClass {
public void method() {
super.method();
// other code
}
}
public class SecondClass extends CommonClass {
public method() {
super.method();
// other code
}
}
答案 1 :(得分:1)
我认为在这种情况下你最好的选择是decorator。 Here您可以看到基于Java的实现。
public class SecondClass extends FirstClass {
private FirstClass firstClass;
...
@Override
void firstMethod() {
// do something before
firstClass.firstMethod();
// do something after
}
但是单个方法中的100行代码似乎不适合我。
答案 2 :(得分:1)
无法更改FirstClass。
这个要求非常有限。如果你根本无法改变第一种方法,那么我只能看到两种可能性。
第一种可能性取决于第一种方法实际上做了什么,以及第二种方法应该做什么。如果你很幸运,也许你可以编写第二种方法,以便它;
如果你无法做到这一点,那么我能看到的唯一其他可能性就是剪切/复制/粘贴/编辑,然后去洗手。