【问题标题】:How can a private field be accessed from another object instance?如何从另一个对象实例访问私有字段?
【发布时间】:2012-12-31 13:06:52
【问题描述】:

我目前正在研究如何在 Scala 中处理协变和逆变类型参数化。还有一种特殊情况,var 字段必须是 private[this] 才能编译。来自此代码 sn-p 中的示例(取自此问题:private[this] vs private):

class Holder[+T] (initialValue: Option[T]) {
    // without [this] it will not compile
    private[this] var value = initialValue

    def getValue = value
    def makeEmpty { value = None }
}

我理解这个例子。但我不明白的是,在什么情况下,私有字段可以从其他实例访问,而不是 itselt (this)?

感谢您的帮助。

【问题讨论】:

    标签: scala


    【解决方案1】:

    如果成员是纯私有的,则可以从同一类的其他实例访问它。 [this] 后缀使其仅对包含它的实例可见。

    【讨论】:

    • 你能给我举个例子,同一个类的另一个实例是如何访问一个纯私有成员的吗?我还是不明白...
    • 它们在实现equals 时很常见。假设您要在 Holder 类上实现 equals。一种常见的方法是使用def equals(that: Holder[T]) = (value == that.value)。此代码仅在 value 设为纯私有时才编译,因为您正在从 this 实例访问 that.value(请注意,这不是正确的 Object.equals 签名,为了更好地理解它进行了简化)。跨度>
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多