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

Hur*_*ent 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*hes 5

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

interface MyCallback {
    void someMethod(int row, int col);
}
Run Code Online (Sandbox Code Playgroud)

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

class MyCallbackImpl implements MyCallback {

    public void somemethod(int row, int col) {
        System.out.println(row * col);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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

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