java - 将多级对象方法作为参数传递

标签 java

如果我的方法调用是:

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/

相关文章:

java - spring-mvc 应用程序的模板和布局

java - 如何停止树中的所有线程?

java - java中数组的while循环问题

java - 从 asynctask 返回变量到 UI

java - Spring Boot 中的 Redis,保留 redis 模板

java - 如何找到此类日期的日期时间格式化程序模式?

java - 使用java对mongodb中的子文档数组进行排序

java - if 和 else 语句有问题

java - 我们什么时候应该使用 Observer 和 Observable?

java - 如何从 Grails 插件更改 jar 版本?