在 Java 8 之前将方法作为参数传递
Passing methods as parameters prior to Java 8
是否可以传递方法和参数?例如,像这些;
public int subMethodA(int value1, int value2, int value3){
int A = value1;
int B = value2;
int C = value3;
return A|B|C;
}
public int subMethodB(int value1, int value2, int value3){
int A = value1;
int B = value2;
int C = value3;
return A|B|C;
}
然后我有另一个方法,我想在这个方法中传递一个参数;
public void MainMethod(Method mymethod, int value1, int value2, int value3){
mymethod(value1, value2, value3);
}
所以稍后,我可以使用类似的方式调用它;
mainMethod(subMethodA, 1,2,3);
mainMethod(subMethodB, 100,2,1520);
这可能吗?
不,这是不可能的。但如果你愿意,你可以使用简单的设计模式板条箱。
像这样:
class siplmeCrate...{
int a,b,c;
public simpleCrate(int a, b..){
set up abc...
}
get abc..
}
然后..
return new simpleCrate(a,b,c);
因为你不能使用Java8,所以你可以这样做。
创建一个名为 Method 的接口:
public interface Method {
public boolean call(int value1,int value2,int value3);
}
创建名为 SubMethodA 的方法的实现:
public class SubMethodA implements Method {
@Override
public boolean call(int value1, int value2, int value3) {
int A = value1;
int B = value2;
int C = value3;
return A|B|C;//This does not compile
}
}
创建包含 mainMethod 的 Main class :
public class Main {
public static void mainMethod(Method method,int value1,int value2,int value3) {
method.call(value1, value2, value3);
}
}
您现在可以按如下方式调用 mainMethod :
Main.mainMethod(new SubMethodA(),1,2,3);
如果您需要将一些其他方法传递给 mainMethod,您还可以使用匿名内部 classes 来消除为每个要传递的方法创建一个 .java 文件的需要:
Main.mainMethod(new Method() {
public boolean call(int value1, int value2, int value3) {
int A = value1;
int B = value2;
int C = value3;
return A|B|C;//This does not compile
}
},1,2,3);
我承认,我觉得她的要求很奇怪,不知道是什么用意,但也许不是最好的办法。
无论如何,有一个方法是的,使用反射:
MyClass myInstance = new MyClass();
Method myMethod = MyClass.getMethod("myMethod");
Object myReturn = myMethod.invoke(myInstance,param1,param2,param3);
你可以传递一个java.lang.reflect.Method作为参数然后调用它。
是否可以传递方法和参数?例如,像这些;
public int subMethodA(int value1, int value2, int value3){
int A = value1;
int B = value2;
int C = value3;
return A|B|C;
}
public int subMethodB(int value1, int value2, int value3){
int A = value1;
int B = value2;
int C = value3;
return A|B|C;
}
然后我有另一个方法,我想在这个方法中传递一个参数;
public void MainMethod(Method mymethod, int value1, int value2, int value3){
mymethod(value1, value2, value3);
}
所以稍后,我可以使用类似的方式调用它;
mainMethod(subMethodA, 1,2,3);
mainMethod(subMethodB, 100,2,1520);
这可能吗?
不,这是不可能的。但如果你愿意,你可以使用简单的设计模式板条箱。
像这样:
class siplmeCrate...{
int a,b,c;
public simpleCrate(int a, b..){
set up abc...
}
get abc..
}
然后..
return new simpleCrate(a,b,c);
因为你不能使用Java8,所以你可以这样做。
创建一个名为 Method 的接口:
public interface Method {
public boolean call(int value1,int value2,int value3);
}
创建名为 SubMethodA 的方法的实现:
public class SubMethodA implements Method {
@Override
public boolean call(int value1, int value2, int value3) {
int A = value1;
int B = value2;
int C = value3;
return A|B|C;//This does not compile
}
}
创建包含 mainMethod 的 Main class :
public class Main {
public static void mainMethod(Method method,int value1,int value2,int value3) {
method.call(value1, value2, value3);
}
}
您现在可以按如下方式调用 mainMethod :
Main.mainMethod(new SubMethodA(),1,2,3);
如果您需要将一些其他方法传递给 mainMethod,您还可以使用匿名内部 classes 来消除为每个要传递的方法创建一个 .java 文件的需要:
Main.mainMethod(new Method() {
public boolean call(int value1, int value2, int value3) {
int A = value1;
int B = value2;
int C = value3;
return A|B|C;//This does not compile
}
},1,2,3);
我承认,我觉得她的要求很奇怪,不知道是什么用意,但也许不是最好的办法。
无论如何,有一个方法是的,使用反射:
MyClass myInstance = new MyClass();
Method myMethod = MyClass.getMethod("myMethod");
Object myReturn = myMethod.invoke(myInstance,param1,param2,param3);
你可以传递一个java.lang.reflect.Method作为参数然后调用它。