Scala面向对象编程深入解析
1. Scala类型系统与值类
Scala拥有丰富的类型系统,这使得并非所有类型都能像Java那样在普通变量和方法声明中被引用。为了解决一些性能和类型包装的问题,Scala 2.10引入了值类(Value Classes)和通用特质(Universal Traits)。
1.1 值类的定义与规则
值类是一种特殊的类,它可以避免包装类型带来的堆分配开销。以下是一个简单的值类示例:
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. 值类不定义辅助构造函数。
5. 值类只定义方法,不定义其他 val 和 var 。
6. 值类不能重写 equals 和 hashCode 方
超级会员免费看
订阅专栏 解锁全文
59

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



