在current JSR 335 draft , 它在更改日志中提到 entry for 0.6.0它“消除了对未绑定(bind)内部类构造函数引用的支持”。
为了说明,假设您有一个名为 A
的外部类和一个名为 B
的内部类,并且您想要一个接受 A
的函数> 并创建一个新的 B
实例:
Function<A, A.B> foo = a -> a.new B();
在 0.6.0 之前,您还可以使用构造函数引用语法来做同样的事情(它甚至记录在 State of the Lambda 中):
Function<A, A.B> foo = A.B::new;
如上所述,0.6.0 不再支持该语法。我真的很想知道为什么。
我查看了 lambda-spec-experts
的文件和 lambda-dev
邮件列表,找不到任何相关信息。
最佳答案
很明显,'new' 是一个关键字,而不是一个方法,并且所有将 'new' 作为方法涉及的都是编译器中的特例。我可以很容易地想象他们想要清理编译器中最不可能的用法,这些用法具有微不足道的解决方法。
推测:可能还有一些冲突/歧义需要解决,我们还不知道即将推出的 JLS,这是一个过渡更改,以尽量减少回归。在您提出问题后 5-6 年,您是否因这种变化而感到痛苦?哈哈
关于Java lambda (JSR 335) : Why "eliminate support for unbound inner class constructor references"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203781/