Java: 使一个方法的参数成为另一个方法

Java: Make parameter to a method another method

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

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

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 中完成吗?感觉好像在哪里见过

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

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

如果您不想为此创建一个单独的名为 class 的对象,您可以选择使用匿名内部 class 创建一个对象,调用您的循环方法,如:

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

你可以使用反射来完成这个技巧!

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

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

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

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

希望对您有所帮助...