我试图用变量创建方法引用,该变量保存对象中某些方法的方法名称:
SomeClass obj = new SomeClass();
String methodName = "someMethod";
我正在寻找完全创建
obj::someMethod
的方法,但是为此使用了变量methodName。可能吗?我知道如何从
methodName
和obj
创建功能接口实例:() -> {
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/