在第19章,#34; scala第2版编程",如何解释粗体句子?
对象私有成员只能从对象内访问 他们是谁定义的。事实证明,从中访问变量 定义它们的同一对象不会导致问题 方差。 直观的解释是,为了构建一个 如果差异会导致类型错误,你需要有一个 引用具有静态较弱类型的包含对象 而不是使用对象定义的类型。用于访问对象 但私有价值,这是不可能的。
答案 0 :(得分:1)
我认为解释Martin想要说的最直观的方法是在Java中查看数组。 Java中的数组是协变的,但不根据协方差规则进行检查。这意味着它们在运行时而不是编译时爆炸:
abstract class Animal {}
class Girafee extends Animal {}
class Lion extends Animal {}
public class Foo {
public static void main(String[] args) {
Animal[] animals = new Girafee[10];
animals[0] = new Lion();
}
}
我能做到这一点的事实是因为:
当从外部谈论班级的私人领域时,这不成立。
例如,假设以下类:
class Holder[+T](initialValue: Option[T]) {
private[this] var value: Option[T] = initialValue
}
当创建Holder
的实例时,我对它的内部字段不可见,因此我无法像使用Java数组那样直接操作它们。这样,编译器确保它们受到保护,并且对字段的每个操作都必须通过一种方法,其中类型检查器是严格的并且不允许时髦的业务。