【发布时间】:2014-08-27 21:54:24
【问题描述】:
在 java 8 中,只有一个抽象方法的抽象类不是函数式接口 (JSR 335)。
这个interface是一个功能接口:
public interface MyFunctionalInterface {
public abstract void myAbstractMethod();
public default void method() {
myAbstractMethod();
}
}
但是这个abstract class 不是:
public abstract class MyFunctionalAbstractClass {
public abstract void myAbstractMethod();
public void method() {
myAbstractMethod();
}
}
所以我不能将抽象类用作 lambda 表达式和方法引用的目标。
public class Lambdas {
public static void main(String[] args) {
MyFunctionalAbstractClass functionalAbstractClass = () -> {};
}
}
编译错误为:The target type of this expression must be a functional interface。
为什么语言设计者会施加这个限制?
【问题讨论】:
-
好问题...兼容性可能吗?
-
这已经被问过并回答过......主要原因是未来的灵活性,预计 lambdas 与类实例有很大不同。
-
在这里,阅读from the horse's mouth。
-
@MarkoTopolnik 发布简短摘要和此链接作为答案。我只是讨厌在 cmets 中看到带有答案的“未回答”问题。 :-)
-
@StuartMarks 是的,你是对的。完成。
标签: java lambda functional-programming java-8