【发布时间】:2014-05-21 21:32:18
【问题描述】:
我正在尝试使用方法引用来捕获方法调用,但遇到了一些限制。这工作正常:
<T> void capture(Function<T, ?> in) {
}
private interface Foo {
String getBar();
}
capture(Foo::getBar);
但如果我将 Foo.setBar 的签名更改为这样的:
private interface Foo {
void setBar(String bar);
}
capture(Foo::setBar);
我收到一个错误:
Cannot make a static reference to the non-static method setBar(String) from the type MyTest.Foo
我不清楚限制是什么。理想情况下,我想使用方法引用来捕获标准设置器上的调用。有没有办法做到这一点?
【问题讨论】:
-
这甚至是 Java 吗?还是 Java 8 中的新语法?
-
能发个错误吗?
-
@AnubianNoob 这确实是Java8s的方法引用等等……
-
呃,什么是“静态”?我没有看到
static修饰符? -
@meriton:方法引用实际上是静态的,因为它就像一个 lambda 表达式,它接受
Foo并调用该引用的方法 on。
标签: java java-8 method-reference