在当前的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-experts和lambda-dev邮件列表,并不能找到任何关于它的信息.
很明显,“new”是一个关键字,而不是一个方法,并且所有涉及“new”作为方法的都是编译器中的特殊情况。我可以很容易地想象他们想要清理编译器中最不可能的用法,这些用法有一些简单的解决方法。
推测:可能还有一些我们尚不知道的即将推出的 JLS 需要解决的冲突/歧义,这是一个过渡性的改变,以最大限度地减少回归。在您提出问题 5-6 年后,您是否因这种变化而遭受痛苦?哈哈
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |