我试图用变量创建方法引用,该变量保存对象中某些方法的方法名称:

SomeClass obj = new SomeClass();
String methodName = "someMethod";


我正在寻找完全创建obj::someMethod的方法,但是为此使用了变量methodName。可能吗?

我知道如何从methodNameobj创建功能接口实例:

() -> {
    try {
        return obj.getClass().getMethod(methodName).invoke(obj);
    } catch (NoSuchMethodException | IllegalAccessException e) {
        return null;
    }
};


但我想知道这是否可以更简便地完成。

最佳答案

这是一种非常罕见的情况-Java8语法糖不太可能为此进行优化。特别是,通常的编译时类型检查是不可能发生的(记住,方法引用只是遵守特定类型协定的匿名类的语法糖)。

如果此模式在您的代码库中很常见(希望不是!),则可以将其移至静态实用程序方法中,然后执行() -> Utils.invoke(obj, methodName)

关于java - Java 8中的变量方法引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39081366/

10-11 22:28
查看更多