论坛首页 Java企业应用论坛

初探Java8新特性之lambda表达式

浏览 24317 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-29  
aws 写道
目前这种看起来就是语法糖,还是要看编译后的字节码有什么变化



不是像scala一样的语法糖,引入了新的字节码指令 ,叫做invokedynamic
0 请登录后投票
   发表时间:2012-11-30  
287854442 写道
kidneyball 写道
287854442 写道
hantsy 写道
这还是 Java 吗? Scala 都看得我头晕。

其实要是喜欢这种语言,完全可以由第三方 JVM 语言来担当,Java 核心搞这么复杂干嘛。


我也是啊  Scala的语法太多 受不了
这部分其实也没那么麻烦了 而且如果不想用就可以不用啊  直接内部类也行   lambda可以看到是语法糖嘛,就比如i++和i=i+1一样 想用那个用哪个了

而且其实我觉得lambda表达式 肯定不是内部类的语法糖,我个人认为内部类的效率不会太高,Java8应该是在字节码上支持匿名函数的,而不是像scala一样,纯粹的语法糖,看似是匿名函数,其实后面还是给你生成了一个匿名内部类的实例


按我半年前看那份草案,那基本上就是匿名内部类的语法糖。楼主有没有检查过现在java8里的lambda编译后有没有偷偷摸摸的给你生成一个匿名内部类的class文件。如果没有,那又是一大进步了,给scala解决了一大难题呀。Scala也是没办法,现在的jvm只能通过匿名内部类来实现闭包,它不照着干,就没法和Java无缝整合了,这可是Scala的大卖点之一。



没有生成匿名内部类的class文件,要真是那样,还不如用scala了,不过也比之前生成了很多乱乱的字节码,回头再开个帖子讨论一下Java8的lambda表达式的实现


没有创建额外的匿名内部类是好事呀,话说当年yammer从scala转Java时提到Scala的缺点之一就是它的闭包导致了大量class文件

引用

5. Avoid closures. Ditching Specs2 for my little JUnit wrapper meant that the
main test class for one of our projects (~600-700 lines) no longer took three
minutes to compile or produced 6MB of .class files. It did this by not capturing
everything as closures. At some point, we stopped seeing lambdas as free and
started seeing them as syntactic sugar on top of anonymous classes and thus
acquired the same distaste for them as we did anonymous classes.


原文: http://codahale.com/downloads/email-to-donald.txt
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics