我有一个特点,称之为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”应用不是一种选择。
可以吗?
答案 0 :(得分:2)
不能用伴侣对象完成。
apply
就像一个占位符。
当你执行MyClass("hello") with Foo
相当于使用Foo应用(“hello”)
如果是伴侣对象,则首先执行apply。用class构造它的不同