加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为什么我的嵌套伴随对象的成员在类中不会自动显示?

发布时间:2020-12-16 09:01:21 所属栏目:安全 来源:网络整理
导读:假设我有这个 Scala代码: object Outer { object Inner { val B = "B" } class Inner { def b = B }} 我希望这能编译,但不能从b的定义访问B.我需要在类中添加import Inner._ Innerto使它工作.这是为什么?伴侣对象Inner是否未正确定义? 解决方法 它不应该
假设我有这个 Scala代码:

object Outer {

  object Inner {
    val B = "B"
  }
  class Inner {
    def b = B
  }
}

我希望这能编译,但不能从b的定义访问B.我需要在类中添加import Inner._ Innerto使它工作.这是为什么?伴侣对象Inner是否未正确定义?

解决方法

它不应该以这种方式工作 – 使用import Inner._是一致的行为.

通常,如果要在Java中实现类似于静态成员的行为,则需要伴随对象. Scala方法是将所有静态成员移动到单个对象,这样可以从中访问协同类的私有/受保护成员:

object Outer {

  object Inner {
    def print(inner: Inner) = inner.B // compiles!
  }    
  class Inner {
    private val B = "B"
  }    
}

您可以将伴随对象用作具有私有构造函数的类的工厂:

scala> object Outer {
     |
     |   object Inner {
     |     def newInstance = new Inner()
     |   }
     |   class Inner private() {
     |     private val B = "B"
     |   }
     | }
defined module Outer

scala> Outer.Inner.newInstance
res1: Outer.Inner = Outer$Inner@431693

scala> new Outer.Inner
<console>:7: error: constructor Inner cannot be accessed in object $iw
       new Outer.Inner
       ^

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读