【发布时间】:2011-10-21 22:21:08
【问题描述】:
是否可以将方法指定为方法参数?
例如
public void someMethod(String blah, int number, method MethodName)
其中 MethodName 是需要指定的不同方法的名称。
谢谢
【问题讨论】:
-
还没有;我们将不得不等待 Java 8 的该功能
标签: java methods parameters
是否可以将方法指定为方法参数?
例如
public void someMethod(String blah, int number, method MethodName)
其中 MethodName 是需要指定的不同方法的名称。
谢谢
【问题讨论】:
标签: java methods parameters
不,但您使用单个方法指定接口。您可以将匿名实现传递给方法
interface CompareOp {
int compare(Object o1, Object o2);
}
// Inside some class, call it Klass
public static int compare ( CompareOp comparator, Object o1, Object o2) {
return comparator.compare(o1, o2);
}
那么你会这样称呼它
Klass.compare( new CompareOp(){
public int compare(Object o1, Object o2) {
return o1.hashCode() - o2.hashCode();
}
}, obj1, obj2 );
【讨论】:
使用反射,可以将Method 作为参数传递。您可以从java tutorial 获取更多信息。这和你做的不完全一样。我建议您在开始使用反射之前考虑问题中链接为possible duplicate 的选项。
【讨论】:
如果你想让someMethod调用MethodName,那么你应该使用回调接口:
public interface Callback {
void callMeBack();
}
// ...
someObject.someMethod("blah", 2, new Callback() {
@Override
public void callMeBack() {
System.out.println("someMethod has called me back. I'll call methodName");
methodName();
}
});
【讨论】:
通过反射,甚至可以使用以下代码:
import java.lang.reflect.Method;
public class Test {
public static void main(final String a[]) {
execute("parameter to firstMethod", "firstMethod");
execute("parameter to secondMethod", "secondMethod");
}
private static void execute(final String parameter, final String methodName) {
try {
final Method method = Test.class.getMethod(methodName, String.class);
method.invoke(Test.class, parameter);
} catch (final Exception e) {
e.printStackTrace();
}
}
public static void firstMethod(final String parameter) {
System.out.println("first Method " + parameter);
}
public static void secondMethod(final String parameter) {
System.out.println("first Method " + parameter);
}
}
【讨论】: