加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala的哪些功能无法翻译成Java?

发布时间:2020-12-16 19:06:53 所属栏目:安全 来源:网络整理
导读:Scala编译器直接编译为 Java字节码(或.NET CIL). Scala的一些功能可以直接在Java中重新完成(例如简单的理解,类,翻译匿名/内部功能等).什么功能不能这样翻译? 这大概是学术兴趣.更有用的是,或许,您使用的Scala的主要特性或成语是不能在Java中轻松表示的? 有
Scala编译器直接编译为 Java字节码(或.NET CIL). Scala的一些功能可以直接在Java中重新完成(例如简单的理解,类,翻译匿名/内部功能等).什么功能不能这样翻译?

这大概是学术兴趣.更有用的是,或许,您使用的Scala的主要特性或成语是不能在Java中轻松表示的?

有什么其他的方式吗?可以直接在Java中完成的事情在Scala中没有直接的等价物? Java中的惯用语不能翻译?

解决方法

在我看来,这个问题错过了一个问题,要求我们通过查看他们生成的字节码来比较JVM语言.

Scala编译为Java等效字节码.也就是说,字节码可能是由Java编写的代码生成的.实际上你甚至可以得到scalac来输出一个看起来很像Java的中间格式.

所有功能,如traits(通过静态转发器),非本地返回(通过异常),延迟值(通过引用)等都可以由Java程序表示,尽管可能是最丑陋的方式!

但是,在生成字节码之前,什么使scala scala而不是Java是scalac可以为您做的事情. scalac已经以静态类型语言的形式去检查程序的正确性,包括编译时的类型正确性(根据其类型系统).

Java和Scala之间的主要区别(当然也是Java也是静态类型的),所以是scala的类型系统,它能够表达java-the-language的类型系统的程序关系.例如:

class Foo[M[_],A](m : M[A])
trait Bar[+A]

这些概念,M是一个类型参数,它本身具有类型参数或者Bar是协方差的,在Java-land中不存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读