Java:为方法创建另一个方法的参数

时间:2015-03-11 20:03:20

标签: java methods

我想创建一个执行特定任务的方法,但随后使用该任务的结果调用另一个方法。很简单,但诀窍是我希望方法(第一个被第一个调用的方法)作为第一个方法的参数。

我可能解释得非常糟糕,所以这就是我认为的样子

public static void main(String[] args) {
    double[][] data = {
        {2,6},
        {-32,5}
    }

    loop(data,{System.out.println(row * col)});
}

public static void loop(double[][] data,somemethod(row,col)) {
    for (int row = 0;row < data.length;row++)
        for (int col = 0;col < data[0].length;col++)
            somemethod(row,col);
}

因此循环方法执行任务,然后运行作为参数传递的代码。这可以在java中完成吗?我觉得我已经在某处看到了它。

3 个答案:

答案 0 :(得分:5)

Java-8之前的方法是使用您想要调用的方法创建一个接口:

interface MyCallback {
    void someMethod(int row, int col);
}

使用所需的实现创建一个对象:

class MyCallbackImpl implements MyCallback {

    public void somemethod(int row, int col) {
        System.out.println(row * col);
    }
}

并让方法采用实现该接口的参数:

public static void loop(double[][] data, MyCallback mycallback) {
    for (int row = 0;row < data.length;row++)
        for (int col = 0;col < data[0].length;col++)
            mycallback.somemethod(row,col);
}

如果您不想为此创建单独的命名类,则可以使用匿名内部类创建对象,调用循环方法,如:

loop(data, new MyCallback() {
    public void somemethod(int row, int col) {
        System.out.println(row * col);
    }});

答案 1 :(得分:0)

在Java 8中,Lambda表达式使这成为可能。以前不可能。这就是我所知道的。

答案 2 :(得分:0)

你可以使用Reflection来做这个伎俩!

首先,你找到这样的方法:

java.lang.reflect.Method method;
try {
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) {
  // ...
} catch (NoSuchMethodException e) {
  // ...
}

在您的情况下,您将发送methodName和methodName的参数作为循环类的参数。找到方法后,执行:

try {
  method.invoke(param1, param1,...);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {

希望它有所帮助...