如果我的方法调用是:
obj.getLevelOne().getLevelTwo().getValue();
我想将此方法作为参数传递如下:
boolean checkValue( obj, method , value)
{
return obj.method() == value;
}
我想像这样调用 checkValue 方法:
checkValue(obj, "getLevelOne().getLevelTwo().getValue", value);
有什么办法可以实现这个目标吗?请帮忙。
最佳答案
在 Java 中,函数并不是一流的概念(在 Java 8 中才出现)。因此,不可能像在许多其他具有函数概念的语言中那样传递方法。
您需要做的是声明一个接口(interface)并使用匿名内部类实现它。例如
界面
interface MyGetter {
Object doGet();
}
检查方法
boolean checkValue(MyGetter getter, Object value) {
return getter.doGet().equals(value);
}
电话
checkValue(new MyGetter() {
public Object doGet() {
return obj.getLevelOne().getLevelTwo().getValue();
}
}, 5);
我们在调用中实际做的是创建一个新类和该类型的对象,以进行您需要的实际调用。
编辑:
如果您需要不同的返回类型,您可以使接口(interface)和检查方法通用,例如
界面
interface MyGetter<T> {
T doGet();
}
检查方法
<T> boolean checkValue(MyGetter<? extends T> getter, T value) {
return getter.doGet().equals(value);
}
电话
checkValue(new MyGetter<SomeClass>() {
public SomeClass doGet() {
return obj.getLevelOne().getLevelTwo().getValue();
}
}, 5);
关于java - 将多级对象方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422565/