在scala中使用泛型方法时类类型错误

时间:2015-07-17 14:56:58

标签: scala

下面是代码片段...一点测试模式代码片段。我正在尝试创建一个方法,通过它我可以更改返回类型。

在调用方法时,我收到异常"类类型预期对象找到"

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
  }
}

1 个答案:

答案 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
  }
}