Scala 如何解释以下关于private[这个]和variance的句子?
在第19章“scala第二版编程”中,如何解释粗体语句 只能从中的对象内部访问对象私有成员 它们是被定义的。事实证明,从 定义它们的同一个对象不会导致 差异直观的解释是,为了构建 如果差异会导致类型错误,则需要 对静态较弱类型的包含对象的引用 而不是定义对象的类型。用于访问对象 然而,私人价值观是不可能的Scala 如何解释以下关于private[这个]和variance的句子?,scala,variance,Scala,Variance,在第19章“scala第二版编程”中,如何解释粗体语句 只能从中的对象内部访问对象私有成员 它们是被定义的。事实证明,从 定义它们的同一个对象不会导致 差异直观的解释是,为了构建 如果差异会导致类型错误,则需要 对静态较弱类型的包含对象的引用 而不是定义对象的类型。用于访问对象 然而,私人价值观是不可能的 我认为解释Martin想说什么的最直观的方法是看Java中的数组。Java中的数组是协变的,但不根据协变规则进行类型检查。这意味着它们在运行时而不是编译时爆炸: abstract class
我认为解释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数组那样直接操作它们。通过这种方式,编译器确保它们受到保护,并且对字段的每次操作都必须通过一个方法进行,其中类型检查器是严格的,不允许出现不正常的业务