在Java中使用完整构造函数调用作为lambda表达式的方法引用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中使用完整构造函数调用作为lambda表达式的方法引用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1380字,纯文字阅读大概需要2分钟。
内容图文
我很久以前遇到过一个比我好的competitive answer,它使用了一个非常新的方法参考我作为lambda的替代品.
Stream.generate(new AtomicInteger(1)::getAndIncrement)...
我查看了有关Method references的Oracle规范,并定义了4种类型:
>引用静态方法ContainingClass :: staticMethodName
>引用包含Object :: instanceMethodName的特定对象的实例方法
>引用特定类型ContainingType :: methodName的任意对象的实例方法
>引用构造函数ClassName :: new
我很难对这个进行分类.我没有在SO上发现任何问题或在文档中解释任何相关的问题.怎么会被翻译成匿名课程?
我的怀疑是:
IntStream.generate(new IntSupplier() {
AtomicInteger atom = new AtomicInteger(1);
@Override
public int getAsInt() {
return atom.getAndIncrement();
}
})....
……我不明白这是怎么回事.乍一看,我猜是表达式是:
IntStream.generate(new IntSupplier() {
@Override
public int getAsInt() {
return new AtomicInteger(1).getAndIncrement();
}
})....
……但这只不过是() – > new AtomicInteger(1).getAndIncrement().
这种表达式在哪里定义,以及如何在lambda / anonymous类中重写?
解决方法:
新的AtomicInteger(1)返回一个实例,所以它是第二个.有关如何翻译的确切细节是特定于实现的,但它是一个单独的实例创建,并由JLS 15.13.3进行备份
First, if the method reference expression begins with an ExpressionName or a Primary, this subexpression is evaluated
简单来说,在第一次遇到声明时会评估::之前的部分.
你假设它是如何被翻译的几乎是正确的,就像在函数本身之外生成一个实例并使用它 – 因为它实际上是最终的,这是允许的.
内容总结
以上是互联网集市为您收集整理的在Java中使用完整构造函数调用作为lambda表达式的方法引用全部内容,希望文章能够帮你解决在Java中使用完整构造函数调用作为lambda表达式的方法引用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。