我想创建一个执行特定任务的方法,但随后使用该任务的结果调用另一个方法。很简单,但诀窍是我希望方法(第一个被第一个调用的方法)作为第一个方法的参数。
我可能解释得非常糟糕,所以这就是我认为的样子
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中完成吗?我觉得我已经在某处看到了它。
答案 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) {
希望它有所帮助...