我多次重复以下模式:
for() {
//Same Code Here
for() {
//Same Code Here
if() {
//Only Part That Is Different
}
}
}
我当时以为他们不会重复自己,而是会陷入自己的方法中,并在if中返回一些内容:
public MyObject myMethod(MyObject myObject) {
for() {
//Same Code Here
for() {
//Same Code Here
if() {
return myObject;
}
}
}
}
这样,我可以调用myMethod(),将返回的值分配给变量,然后执行我想要的操作。这不会编译,因为如果不满足if条件,则不会返回任何内容。如果条件不满足,我不希望发生任何事情。
我走了正确的路,还是有更好的方法删除重复的代码?
答案 0 :(得分:3)
如果您至少使用Java 8,请执行以下操作:
public void myMethod(MyObject obj, Consumer<MyObject> action) {
for() {
for() {
if() {
action.accept(obj)
}
}
}
}
现在,您可以通过传递给它的不同操作来调用此方法:
myMethod((obj) -> System.out.println(obj))
答案 1 :(得分:1)
如果您使用的是 Java 7 或更早版本,则可以使用接口作为 myMethod 的参数。然后在您希望发生不同事情的代码中,调用接口上的抽象方法。抽象方法的不同实现会导致不同的事情发生。
public interface DoSomething {
public void doingSomething();
}
public class DoX implements DoSomething {
public void doingSomething() {
System.out.println("doing x");
}
}
public class DoY implements DoSomething {
public void doingSomething() {
System.out.println("doing y");
}
}
public class MyObject {
public void myMethod(DoSomething doSomething) {
for(int i = 0; i < 3; i++) {
System.out.print(i);
for(int j = 0; j < 3; j++) {
System.out.print(j);
if(i == 1 && j == 2) {
doSomething.doingSomething();
}
}
}
System.out.println("");
}
}
然后将抽象方法的具体实现作为参数传递给您希望发生不同的事情
public class MyApp {
public static void main(String[] args) {
MyObject myObject = new MyObject();
myObject.myMethod(new DoX());
myObject.myMethod(new DoY());
}
}
答案 2 :(得分:-1)
这是解决问题的一种方法:
public MyObject myMethod(MyObject myObject) {
for() {
//Same Code Here
for() {
//Same Code Here
if() {
return myObject;
}
}
}
MyObject myObject2 = null
return myObject2;
}