是否可以使用apply混合特征?

时间:2014-01-04 04:03:53

标签: scala

我有一个特点,称之为foo。我有一个班级,称之为MyClass:

class MyClass(something: String) { ... }

我可以这样做:

val myStuff = new MyClass("hello") with foo

然而,我想要做的是让我的班级有一个伴侣对象并使用apply来创建一个实例:

class MyClass(something: String) { ... }
object MyClass {
  def apply(something: String) = {      
    new MyClass(something)
  }
}

问题是以下代码无效:

val myStuff = MyClass("hello") with foo

这将使用apply来创建MyClass的实例,但不能使用该特征。有没有办法做到这一点?

我的目标是测试 - 特性(foo)包含MyClass中一些事物的覆盖,它允许我将特征用作数据模拟。这正是我所需要的,但我希望能够做到这一点,而不是做一个“新的”。而且由于我想将它混合到我的测试代码中而不是生产中,所以在同伴对象中使用“with foo”应用不是一种选择。

可以吗?

1 个答案:

答案 0 :(得分:2)

不能用伴侣对象完成。 apply就像一个占位符。 当你执行MyClass("hello") with Foo 相当于使用Foo应用(“hello”) 如果是伴侣对象,则首先执行apply。用class构造它的不同