Java中有哪些特性在scala中没有。

3

Java和Scala都是面向对象的编程语言(Scala也具备函数式编程的特性)。我对Scala还比较新,但据我了解,Scala在面向对象方面比Java更加先进。那么,在Java中有哪些功能或特性,而在Scala中并没有被引入呢?以下是我所知道的:

  1. Scala没有静态关键字,它使用对象来替代。

  2. Scala不存在“受检查异常”的概念。

  3. Scala中没有基本数据类型。


5
我嗅到了煽动性言论的味道 :) - Ashalynd
@Ashalynd, :-). Scala是我最近开始学习的东西。但在那之前,我已经阅读了许多关于静态和可检查异常(我的问题中的#1和#2)以及它们为何不好的讨论。 :-) - Arnab Biswas
4
此问题似乎与主题无关,因为它涉及一份语言差异清单。 - Dave Newton
@DaveNewton,我的意图是了解理想的面向对象编程中不应该存在的特性(从错误中学习)。顺便说一下,Java和Scala是我熟悉的面向对象编程语言。 - Arnab Biswas
@ArnabBiswas 如果您不想使用Java,那么您可能会感到不太幸运,因为Scala是专门设计用于良好的Java互操作性。如果您可以放弃这一点,我相信很多功能将会缺失,例如方法重载、抽象类(而不是特质)、破碎的数组变异等等。 - 0__
显示剩余3条评论
1个回答

9
当然,某些东西是否是“功能”还有争议。你可以同样地说,Scala 具有异常不被检查和因此不是 PITA 的特性... 同样,统一类型和基元 (Scala 仍然出于性能原因而具有这些特性)。
除此之外,我想到以下几点:
- 枚举。在 Scala 中不是一种语言构造。 - 在 Java 中的 for-loop,没有 break 和 continue(只能通过普通方法实现);因此也没有 jump-to 标签。 - 在 Java 类中可以拥有多个独立的构造函数(我想),而在 Scala 中每个次要构造函数必须调用一个主要构造函数(正确吗?) - 变量声明和赋值分开(final int x; ...; x = 3) - assert 不是一种语言构造 - 在 Java 中,方法参数充当可变变量,在 Scala 中它们是只读 val。 - 关于 static 被单例 object 取代:没有静态内部类。 - 没有特殊的三元运算符 ?;在 Scala 中使用的是 if 表达式。 - 没有数组字面量,尽管我想 Array(1, 2, 3) 可能会在未来的 Scala 编译器版本中得到优化。 - switch 和模式匹配的工作方式不同。switch 允许 fall through cases,但只适用于少数类型。 - 还有一些原始运算符,例如前缀/后缀递增 ++i、i++。
大多数其他东西都是对事物的不同观点(例如声明站点与调用站点方差),但并不真正存在于 Java 中的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接