Java:在方法参数中指定方法?

Java:在方法参数中指定方法?,java,methods,parameters,Java,Methods,Parameters,是否可以将方法指定为方法参数 e、 g 其中MethodName是需要指定的其他方法的名称 谢谢否,但您可以使用单个方法指定接口。您可以将匿名实现传递给该方法 interface CompareOp { int compare(Object o1, Object o2); } // Inside some class, call it Klass public static int compare ( CompareOp comparator, Object o1, Object o2)

是否可以将方法指定为方法参数

e、 g

其中MethodName是需要指定的其他方法的名称


谢谢

否,但您可以使用单个方法指定接口。您可以将匿名实现传递给该方法

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

使用反射,可以将
方法
作为参数传递。您可以从中获得更多信息。这和你做的不完全一样。我建议您考虑问题中的选项,如前面一样,开始使用反射。< /P> < P>如果您想“代码> SoMeMod OD/CODE >调用<代码>方法名,那么您应该使用回调接口:

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

}

对不起,我对Java还是相当陌生的。你能为我详细说明一下吗?@QuanChi:详细说明什么部分?@QuanChi请看问题注释中的重复问题。是的,你可以这样做,代价是一些讨厌的代码和类型安全性的损失还没有;我们将不得不等待Java8实现该功能
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);
    }

}