Scala 可见性规则与类型系统初探
1. 面向对象设计中的常规可见性原则
在面向对象设计里,字段通常应设为私有(private)或受保护(protected)。若需访问字段,应通过方法实现,且默认并非所有内容都应可访问。这么做主要有两个原因:
- 防止用户在开发者无法控制的情况下修改可变字段。不过,使用不可变值可消除此顾虑。
- 特定字段可能属于实现细节,而非开发者想暴露的公共抽象部分。
当访问合理时,统一访问原则(Uniform Access Principle)的优点在于,能为用户提供公共字段访问的语义,可根据任务需求,选择使用方法或直接访问字段,用户无需知晓具体实现方式,甚至在修改实现时,也无需强制用户修改代码,仅需重新编译。
类型的“用户”有两种:派生类型和处理该类型实例的代码。派生类型通常比实例用户更需要访问其父类型的成员。
2. Scala 可见性规则概述
Scala 的可见性规则与 Java 类似,但应用更一致且更灵活。例如,在 Java 中,若内部类有私有成员,外部类可访问;而在 Scala 中,外部类无法访问私有成员,但 Scala 提供了让其对外部类可见的声明方式。
可见性修饰关键字(如 private 和 protected)与 Java 和 C# 一样,出现在声明开头,可用于类型的 class 或 trait 关键字前、字段的 val 或 var 前以及方法的 def 前。还能在类的主构造函数上使用访问修饰关键字,将其置于类型名和类型参数(若有)之后、参数列表之前,如 class Restricted[+A] private (name: String) {
超级会员免费看
订阅专栏 解锁全文
3

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



