13

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

为了说明,假设您有一个名为 的外部类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-expertslambda-dev邮件列表的档案,但找不到任何有关它的信息。

4

1 回答 1

0

很明显,“new”是一个关键字,而不是一个方法,并且所有涉及“new”作为方法的都是编译器中的特殊情况。我可以很容易地想象他们想要清理编译器中最不可能使用的、有微不足道的变通办法的用法。

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

于 2019-03-07T14:18:51.400 回答