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) {
希望对您有所帮助...
我想创建一个方法来执行特定任务,然后使用该任务的结果调用另一个方法。很简单,但诀窍是我希望方法(第一个方法调用的第二个方法)成为第一个方法的参数。
我可能解释得很糟糕,所以这就是我认为的样子
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) {
希望对您有所帮助...