我想知道如果方法本身有参数,如何与方法参数的调用者创建契约(Contract)。所以我用...
ClassA {
String string_ = "HI";
public static void subscribe(Object class, Method action) {
action.invoke(class, string_);
}
}
ClassB {
ClassB() {
ClassA.subscribe(this, this.getClass().getMethod("load", String.class));
}
public void load(String input) {
if(input.equals("HI")) {
...
}
}
}
我想知道如何确保作为“action”传递的方法将 String 作为参数(即确保 Method action == load(String){})?有没有类似的东西:
public static void subscribe(Object class, Method action(String.class)) {
我想在 subscribe 的方法签名中执行此操作,以便调用类(ClassB)很明显它需要准备接受指定类型的参数。
编辑:更新了最后一个代码位,以免显得方法是通用的。我使用 <> 来代表我试图传达的内容的示例是错误的选择。
最佳答案
在 Java 中没有办法做到这一点。 Method 类不是泛型的,而且也不可能如此,因为方法可以采用任意数量的参数,并且无法使类在可变数量的类型上泛型。
也许您能做的最好的事情就是声明您自己的类型来代替方法:
public interface Action<T, P> {
public void invoke(T target, P parameter);
}
然后:
public static <T> void subscribe(T obj, Action<T, String> action) {
action.invoke(obj, string_);
}
ClassB() {
ClassA.subscribe(this, new Action<ClassB, String>() {
public void invoke(ClassB target, String parameter) {
target.load(parameter);
}
});
}
关于java - 方法作为带有签名合约的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850759/