下面是代码片段...一点测试模式代码片段。我正在尝试创建一个方法,通过它我可以更改返回类型。
在调用方法时,我收到异常"类类型预期对象找到"
trait A
trait B extends A {
def aba[T](a:Int):T
}
class D
class C extends B {
def aba[D](a:Int) = {
println("asasas")
new D
}
}
答案 0 :(得分:3)
Scala 2.11中的实际错误是
:13:错误:需要类类型但D找到
这意味着您无法实例化通用类型D
- 您的D
类被[D]
定义隐藏了
由于Liskov替换原则,您也无法覆盖T
(作为aba
方法签名的一部分),因为它会改变行为(和签名)子类。但是,您可以将T
定义为类型成员:
trait A
trait B extends A {
type T
def aba(a:Int):T
}
class D
class C extends B {
type T = D
def aba(a:Int): T = {
println("asasas")
new D
}
}