在Java 8之前将方法作为参数传递

时间:2015-02-28 16:33:32

标签: java methods parameters main

是否可以传递方法和参数?例如,像这些;

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);

这可能吗?

3 个答案:

答案 0 :(得分:4)

由于您无法使用Java 8,因此您可以这样做。

创建一个名为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类:

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,您还可以使用匿名内部类来消除为每个要传递的方法创建.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);

答案 1 :(得分:0)

我承认我觉得她的要求很奇怪,不知道哪个意图但也许不是最好的前进方式。

无论如何,有一种方法是使用反射:

MyClass myInstance = new MyClass();
Method myMethod = MyClass.getMethod("myMethod");
Object myReturn = myMethod.invoke(myInstance,param1,param2,param3);

您可以将java.lang.reflect.Method作为参数传递,然后调用它。

答案 2 :(得分:-1)

不,不可能。但如果你愿意,你可以使用简单的设计模式箱。

像这样:

class siplmeCrate...{
     int a,b,c;
     public simpleCrate(int a, b..){
          set up abc...
     }

     get abc..

}

然后..

return new simpleCrate(a,b,c);