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

2022-09-04 23:37:50

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

为了说明这一点,假设您有一个名为 的外部类和一个名为 的内部类,并且您需要一个函数来获取并创建一个新实例:ABAB

Function<A, A.B> foo = a -> a.new B();

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

Function<A, A.B> foo = A.B::new;

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

我已经查看了 lambda 规范专家lambda-dev 邮件列表的存档,但找不到有关它的任何信息。


答案 1

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

推测:对于我们尚不知道的即将到来的JLS,可能还有一些冲突/歧义需要解决,这是一个过渡变化,以尽量减少回归。在你的问题问了5-6年后,你有没有受到这种变化的影响?哈哈


答案 2

推荐