Scala面向对象编程深入解析
1. Scala类型系统与值类
Scala拥有比Java更丰富的类型系统,这导致并非所有类型都能像在Java中那样在普通变量和方法声明里被引用。不过目前我们看到的示例都能正常工作。
在Scala里,为实现类型类(也叫扩展方法),引入包装类型是常见操作。但围绕值类型的包装会把它们变成引用类型,这就破坏了使用基本类型的性能优化。
Scala 2.10引入了值类(Value Classes)和通用特质(Universal Traits)来解决这个问题。值类对可声明的内容有限制,但好处是包装器不会在堆上分配内存。
以下是一个值类的示例:
// src/main/scala/progscala2/basicoop/ValueClassDollar.sc
class Dollar(val value: Float) extends AnyVal {
override def toString = "$%.2f".format(value)
}
val benjamin = new Dollar(100)
// Result: benjamin: Dollar = $100.00
要成为有效的值类,需遵循以下规则:
1. 值类有且仅有一个公共的 val 参数(从Scala 2.11开始,参数也可以是非公共的)。
2. 参数的类型不能本身就是值类。
3. 如果值类是参数化的,不能使用 @specialized 注解。
4. 值
超级会员免费看
订阅专栏 解锁全文
10

被折叠的 条评论
为什么被折叠?



