[英]Advantages of Scala's type system
我正在探索Scala语言。 我经常听到的一个主张是Scala具有比Java 更强大的类型系统。 通过这个我认为人们的意思是:
scalac
拒绝某些错误的程序, javac
会愉快地编译,只会导致运行时错误。 我这么认为是对的吗?
Scala Type系统的主要优点不是更强大 ,而是更丰富 (参见“ Scala类型系统 ”)。
(Java可以定义其中的一些,并实现其他的,但Scala内置了它们)。
另见神话制造者1:Scala的“类型类型” ,评论Steve Yegge的博客文章 ,他将“Scala”视为“Frankenstein's Monster”,因为“有类型类型和类型类型”。
(type1, …)=>returnType
语法), +T
声明类型T
仅在协变位置使用。 Stack[T]
是的子类型Stack[S]
如果T
是的子类型S
。 -T
将声明T
仅用于逆变位置。 Java的主要安全问题与方差有关。 基本上,程序员可以使用不正确的方差声明,这可能导致在Java中运行时抛出异常,而Scala不允许这样做。
事实上,Java的Array
是共变体这一事实已经成为一个问题,因为它允许生成错误的代码。 例如,如sepp2k所示 :
String[] strings = {"foo"};
Object[] objects = strings;
objects[0] = new Object();
然后,当然,Java中有原始类型,它允许所有类型的东西。
此外,虽然Scala也有它,但是有铸造。 Java API具有丰富的类型转换,并且没有类似Scala的case x: X => // x is now safely cast
。 当然,有一个案例使用instanceof
来实现这一点,但没有动力去做。 实际上,Scala的asInstanceOf
是故意冗长的。
这些是使Scala的类型系统更强大的东西。 正如VonC所示,它也更加丰富。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.