首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类构造函数中使用特质方法

在类构造函数中使用特质方法
EN

Stack Overflow用户
提问于 2015-03-06 17:40:21
回答 1查看 268关注 0票数 5

我有一个特征和一个扩展这个特性的类。我可以从以下特点中使用这些方法:

代码语言:javascript
复制
trait A {
  def a = ""
}

class B(s: String) extends A {
  def b = a 
}

但是,当我在构造函数中使用该属性的方法时,如下所示:

代码语言:javascript
复制
trait A {
  def a = ""
}

class B(s: String) extends A {
  def this() = this(a) 
}

然后出现以下错误:

代码语言:javascript
复制
error: not found: value a

有什么方法来定义在特征中构造类的默认参数吗?

编辑:澄清目的:有akka-testkit:

代码语言:javascript
复制
class TestKit(_system: ActorSystem) extends { implicit val system = _system }

每个测试都是这样的:

代码语言:javascript
复制
class B(_system: ActorSystem) extends TestKit(_system) with A with ... {
  def this() = this(actorSystem)
  ...
}

因为我想在A中创建通用的ActorSystem:

代码语言:javascript
复制
trait A {
  val conf = ...
  def actorSystem = ActorSystem("MySpec", conf)
  ...
}
EN

回答 1

Stack Overflow用户

发布于 2015-03-06 19:10:55

这有点棘手,因为Scala的初始化顺序。我找到的最简单的解决方案是使用apply as factory方法为B类定义一个伴生对象:

代码语言:javascript
复制
trait A {
  def a = "aaaa"
}

class B(s: String) {
 println(s)
}

object B extends A {
  def apply() = new B(a)
  def apply(s: String) = new B(s)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28904485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档