我很难弄清楚为什么 lambda 表达式可以分配给某些功能接口,但不能分配给其他接口。一个示例,使用Metrics 库中的一些功能接口:
Gauge<Double> foo = () -> { return null; };
RatioGauge bar = () -> { return null; };
第二条语句有编译错误(在 Eclipse 中):
此表达式的目标类型必须是函数式接口
据我所知,RatioGauge 是一个功能接口。我错过了什么吗?
我很难弄清楚为什么 lambda 表达式可以分配给某些功能接口,但不能分配给其他接口。一个示例,使用Metrics 库中的一些功能接口:
Gauge<Double> foo = () -> { return null; };
RatioGauge bar = () -> { return null; };
第二条语句有编译错误(在 Eclipse 中):
此表达式的目标类型必须是函数式接口
据我所知,RatioGauge 是一个功能接口。我错过了什么吗?
一个函数接口只能有一个抽象方法(除了来自 Object 类的方法)。
Gauge.java 的源代码= http://grepcode.com/file/repo1.maven.org/maven2/com.codahale.metrics/metrics-core/3.0.0/com/codahale/metrics/Gauge.java#Gauge
RatioGauge.java 的源代码= http://grepcode.com/file/repo1.maven.org/maven2/com.codahale.metrics/metrics-core/3.0.0/com/codahale/metrics/RatioGauge.java
注意 Gauge.java 只有一个抽象方法,而 RatioGauge 有很多方法。