【问题标题】:Java: Specify method in method parameters? [duplicate]Java:在方法参数中指定方法? [复制]
【发布时间】:2011-10-21 22:21:08
【问题描述】:

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

例如

public void someMethod(String blah, int number, method MethodName)

其中 MethodName 是需要指定的不同方法的名称。

谢谢

【问题讨论】:

  • 还没有;我们将不得不等待 Java 8 的该功能

标签: java methods parameters


【解决方案1】:

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

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

【讨论】:

  • 对不起,我对 Java 还是很陌生。你能帮我详细说明一下吗?
  • @QuanChi:详细说一下?
  • @QuanChi 请看问题cmets中的重复问题。
【解决方案2】:

使用反射,可以将Method 作为参数传递。您可以从java tutorial 获取更多信息。这和你做的不完全一样。我建议您在开始使用反射之前考虑问题中链接为possible duplicate 的选项。

【讨论】:

  • 是的,你可以这样做,但代价是一些讨厌的代码和类型安全性的损失
【解决方案3】:

如果你想让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();
    }
});

【讨论】:

    【解决方案4】:

    通过反射,甚至可以使用以下代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多