我有一些类似于以下的代码:
class testClass {
class A(val next:Option[A]){
def printA=println("A called")
}
class B(val someValue:Int){
def printB=println("B called with value "+someValue)
}
def printStuff[T](obj:T):Any={
obj match{
case a:A=>{ a.printA
return new A(Some(a))
}
case b:B=>{ b.printB
return if (b.someValue==0) new B(0) else
printStuff(new B(b.someValue-1))
}
}
}
在这里,我希望我的方法 printStuff 返回一个与输入具有相同类型的对象。但是,在尝试编译时,我收到以下错误:
error: type mismatch;
found : a.type (with underlying type testClass.this.A)
required: T
return a
有类似的错误return b
。我意识到我可以将返回类型设置为 Any,但是在我的“真实”代码中,我以递归下降的方式应用该函数,所以它会迫使我添加很多asInstanceOf
s,这是我想要的避免。
是否有可能让 Scala 的类型系统找出我正在尝试编写的内容,而无需完全重写该函数?
编辑:我试图编辑我的示例以显示在我的真实代码中可能很重要的东西:
它是递归的事实
它的返回类型取决于参数之一的事实。