我花了所有时间在我的伴生对象中组合一个工厂方法,如下所示:
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)
到底是怎么回事!?我刚做了这个!?帮助!!!
我花了所有时间在我的伴生对象中组合一个工厂方法,如下所示:
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)
到底是怎么回事!?我刚做了这个!?帮助!!!
好吧,年轻的 Scala 程序员,不要害怕,因为答案很简单。您没有正确使用工厂。看,这段代码实际上会做你想做的事:
val widget = Stuff(1,2)
//makes Stuff(1, 2L)
这里的问题是你的语法。当您调用new
它时,它会实例化一个新的Stuff
. 但apply
它真的是语法糖,widget.apply(1,2)
没有太多其他的东西。
您还可以在此处了解有关apply
糖的更多信息:Scala 的 apply() 方法是如何发挥作用的?
继续编码年轻人。