nob*_*beh 10 java lambda java-8
一般问题是:
object::aMethod,是否可以将其转换为类型,如MethodHandle功能接口?举个例子,假设我们想要一个MethodRefRunner:
class MethodRefRunner {
static void execute(Object target, WHATTYPE mref, Object... args) {
mref.apply(args);
}
}
Run Code Online (Sandbox Code Playgroud)
它可以用作: MethodRefRunner.execute(o, o::someMethod, someParam)
在上面的代码片段中,一个选项WHATTYPE是java.util.function.Function非常严格的.正如这个答案提到的那样,在版本b75之前,有一个java.util.function.Block可用的并且可能很方便.
另一方面,任何WHATTYPE可能以某种方式转换为java.lang.invoke.MethodHandle?的机会?
Java专家注意:请根据需要优化问题的标题.
我认为没有办法做你想做的事.WHATTYPE必须是一个功能界面 - 不一定Function,但是单个抽象方法匹配的界面somemethod.它是一种普通的接口类型,遵循管理Java类型的通常规则. java.util.function.Block这是一个普通的界面类型,并不像你想象的那样特别.(顺便说一下,它现在还在,现在叫Consumer.)
方法引用就像lambda一样,就像lambda一样,它本身没有"类型".它的类型取决于使用它的上下文.所以你的问题没有意义.如果在对此MethodRefRunner.execute()方法的调用中使用方法引用,那么方法引用的类型将是WHATTYPE(无论是什么)的实例,因为这是声明接受的方法.如果你从其他地方拿到它,那么那个地方就会知道它是什么类型的.
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |