Java lambdas(JSR 335):为什么"消除对未绑定的内部类构造函数引用的支持"?

Chr*_*ung 12 java jsr335

当前的JSR 335草案中,它在0.6.0的更改日志条目中提到它"消除了对未绑定的内部类构造函数引用的支持".

为了说明,假设您有一个名为的外部类A和一个名为的内部类B,并且您需要一个接受A并创建新B实例的函数:

Function<A, A.B> foo = a -> a.new B();
Run Code Online (Sandbox Code Playgroud)

在0.6.0之前,您还可以使用构造函数引用语法来执行相同的操作(甚至在Lambda的状态中记录):

Function<A, A.B> foo = A.B::new;
Run Code Online (Sandbox Code Playgroud)

如上所述,0.6.0不再支持该语法.我真的很想知道为什么.

我已经通过档案的看着lambda-spec-expertslambda-dev邮件列表,并不能找到任何关于它的信息.

use*_*577 0

很明显,“new”是一个关键字,而不是一个方法,并且所有涉及“new”作为方法的都是编译器中的特殊情况。我可以很容易地想象他们想要清理编译器中最不可能的用法,这些用法有一些简单的解决方法。

推测:可能还有一些我们尚不知道的即将推出的 JLS 需要解决的冲突/歧义,这是一个过渡性的改变,以最大限度地减少回归。在您提出问题 5-6 年后,您是否因这种变化而遭受痛苦?哈哈