Jos*_*one 9 java java-8 codahale-metrics
我很难理清为什么lambda表达式可以分配给某些功能接口,而不是其他功能接口.例如,使用Metrics库中的一些功能接口:
Gauge<Double> foo = () -> { return null; };
RatioGauge bar = () -> { return null; };
Run Code Online (Sandbox Code Playgroud)
第二个语句有一个编译错误(在Eclipse中):
此表达式的目标类型必须是功能接口
据我所知,RatioGauge是一个功能界面.我错过了什么吗?
ysh*_*vit 22
抽象类(即使它只有一个抽象方法)也不是一个功能接口.只有一个界面可以是一个.
来自JLS 9.8:
功能接口是一个只有一个抽象方法的接口(除了Object的方法)...(强调添加)
最初的想法是让abstact类表示为lambda; 它们被称为"SAM类型",代表"单一抽象方法".结果证明这是一个难以有效解决的问题.这个帖子讲的是为什么; 基本上,基类的构造函数使它变得困难.