【发布时间】:2012-08-17 12:19:35
【问题描述】:
我花了这么多时间在我的伴生对象中组合一个工厂方法,如下所示:
class Stuff(val a: Int, val b: Long) { this() = this(0,0L) }
object Stuff {
def apply(a:Int, b:Int) = new Stuff(a, b.toLong)
}
但是当我以为我要杀死它时,我就去编译了,但这不起作用:
val widget = new Stuff(1,2)
这是怎么回事!?我刚做了这个!?救命!!!
【问题讨论】:
-
实际上,如果您正确地将缺少的
def插入到class中,new Stuff(1, 2)应该可以正常工作(new Stuff(1, 2L)也应该如此)。 -
使用
class Stuff private(...) {...}将 Stuff 的 ctor 设为私有,不再混淆。 -
有趣,我不知道类也可以有
apply()工厂。这是在伴随对象工厂之后添加的吗?
标签: scala syntactic-sugar companion-object