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

Scala:我可以使用工厂方法重现匿名类创建吗?

发布时间:2020-12-16 08:47:46 所属栏目:安全 来源:网络整理
导读:据我所知,如果我使用new关键字创建一个类,并使用构造函数跟随类名,Scala会创建一个匿名类: class MyClass { def doStuff() { // ... }}val mc = new MyClass { doStuff()} 好处是构造函数中的所有代码都在新对象的范围内. 有没有办法可以重现这种语法,其中
据我所知,如果我使用new关键字创建一个类,并使用构造函数跟随类名,Scala会创建一个匿名类:

class MyClass {
  def doStuff() { 
    // ... 
  }
}

val mc = new MyClass {
  doStuff()
}

好处是构造函数中的所有代码都在新对象的范围内.

有没有办法可以重现这种语法,其中类是由工厂方法而不是new关键字创建的?即使以下代码工作:

val mf = new MyFactory

val mc = mf.MyClass { 
  doStuff() 
}

我找不到办法做到这一点,但Scala有很多东西,这可能很容易!

使用下面@Ricky建议的导入,我可以得到:

val mf = MyFactory;
val mc = mf.MyClass

{
  import mc._
  doStuff()
}

(需要块之前的空行)但该代码块不是构造函数.

解决方法

您可以这样做,但仍需要保留new关键字,并将嵌套类创建为路径依赖类型:

class Bippy(x: Int) {
  class Bop {
    def getIt = x
  }
}

val bip = new Bippy(7)
val bop = new bip.Bop

bop.getIt // yields 7

val bop2 = new bip.Bop{ override def getIt = 42 }

bop2.getIt // yields 42

(编辑:李大同)

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

    推荐文章
      热点阅读