Java Lambda表达式:为什么需要引用方法名?

Java Lambda表达式:为什么需要引用方法名?,java,lambda,Java,Lambda,假设我有一个功能接口和Lambda以及标准用法: interface NumericMethod{ int operation(int number); } NumericMethod add1 = (x) -> x+1 System.out.println(add1.operation(7))//but not (...add1(7)) 所以我的问题是,为什么不简单地加上1(7)?只能调用一个方法。因为在您的代码中,add1不是一个方法,而是一个对象。如果在定义lambda时,J

假设我有一个功能接口和Lambda以及标准用法:

interface NumericMethod{
   int operation(int number);
}
NumericMethod add1 = (x) -> x+1
System.out.println(add1.operation(7))//but not (...add1(7))

所以我的问题是,为什么不简单地加上1(7)?只能调用一个方法。

因为在您的代码中,add1不是一个方法,而是一个对象。如果在定义lambda时,Java 8团队决定可以直接调用具有一个方法的类,那么在对象和方法之间不断缩小的界限方面,会留下大量的混乱需要清理。

什么?这甚至不是有效的Java语法。请提供一个有效的示例,您的意思是
numericmethodadd1=(x)->x+1?因为Java中没有函数。只有方法。因此,add1不是一个函数,而是NumericMethod类型的对象。设计者本可以授权这种语法,但这会使事情变得更加困难,引入命名冲突等,而不会带来任何实质性的好处。您可以使用
默认
方法的功能接口。那你怎么办?难道没有允许这种语法的语言吗?对我来说,一个只有一个方法的类基本上就是这个方法,所以这个类的一个对象就是这个方法,因此函数可以是Java中的对象。@Jeff仅仅因为某些事情是可能的并不意味着它应该被完成,或者说这是一个好主意。Java语言设计人员只是认为这不值得。@JBNizet:Understand;我所能说的是,对我来说,以这种方式提及该方法似乎更为自然。