【发布时间】:2024-05-02 15:50:04
【问题描述】:
我正在探索 Scala 语言。我经常听到的一种说法是 Scala 具有比 Java 更更强大的类型系统。我认为人们的意思是:
-
scalac拒绝某些错误程序,javac会顺利编译,但只会导致运行时错误。 - 可以在 Scala 程序中对某些不变量进行编码,这样编译器就不会让程序员编写违反条件的代码。
我这样想对吗?
【问题讨论】:
-
Java 不会像 Scala 那样让你编译“有缺陷的程序”;然而,与 Java 相比,Scala 允许 [安全地] 表达更多的结构——而且通常以一种更简单的方法。不过,Scala 仍然“遭受”类型擦除。
-
@pst:是的,它会的。
String[] strings = {"foo"}; Object[] objects = strings; objects[0] = new Object();将在 java 中编译得很好,然后在运行时抛出 NPE。等效的 scala 代码不会编译。 -
@sepp2k 我认为被抛出的是
ArrayStoreException,而不是NPE。 -
@pst:我认为拥有静态类型系统的全部意义在于自动派生程序的某些属性,而无需实际运行它。所以我期待
scalac分析输入程序并仅在不存在某些类别的错误时接受它。 -
是的,当然。我不知道我为什么说 NPE。