我试图找出如何调用构造函数Scala的抽象类型:如何调用Scala抽象类型的构造函数?
class Journey(val length: Int)
class PlaneJourney(length: Int) extends Journey(length)
class BoatJourney(length: Int) extends Journey(length)
class Port[J <: Journey] {
def startJourney: J = {
new J(23) // error: class type required but J found
}
}
这甚至是可行的?我熟悉Scala manifests,但我不清楚他们在这里可以如何帮助。同样我无法弄清楚如何做同样的同伴对象的适用()构造函数:
object Journey { def apply() = new Journey(0) }
object PlaneJourney { def apply() = new PlaneJourney(0) }
object BoatJourney { def apply() = new BoatJourney(0) }
class Port[J <: Journey] {
def startJourney: J = {
J() // error: not found: value J
}
}
任何想法感激地接受!
谢谢莫里茨 - 但是将代码粘贴到REPL中会引发一些错误?另外如何将参数添加到默认的“构造函数”? –
您必须为此代码输入粘贴模式才能在REPL中工作(只需在粘贴前键入':paste')即可。 Philippe修复的代码也存在错误。 – Moritz
如果你想添加参数,你可以简单地在'Default'特性中添加一个新的方法。 '默认[J]]'会给你一个带有提供的类型参数的特性实例,你可以调用你喜欢的任何方法,例如, '隐式[默认[J]]。创建(23)'。请参阅示例[此问题](http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits)以了解有关隐含工作的详细信息。 – Moritz