【问题标题】:Type error when when trying to override a generic function in a concrete implementation of an abstract class尝试在抽象类的具体实现中覆盖泛型函数时出现类型错误
【发布时间】:2015-09-07 05:08:54
【问题描述】:

可以在控制台中使用以下代码重现该错误。

case class SomeClass(name: String)

abstract class Factory() {
  protected def create[U](name: String) : U
}

class SomeFactory extends Factory() {
  override def create[SomeClass](name: String) = SomeClass(name)
} 

:11: 错误:类型不匹配;
找到:SomeClass(在对象 $iw 中) 必需:SomeClass(在方法创建中) 覆盖 def create[SomeClass](name: String) = SomeClass(name)

【问题讨论】:

  • 看起来您需要泛型参数才能继续 Factory 类?目前create需要支持客户端指定的任意类型。

标签: scala generics abstract


【解决方案1】:

看起来这就是你想要实现的目标:

case class SomeClass(name: String)

abstract class Factory[U]() {
  protected def create(name: String) : U
}

class SomeFactory extends Factory[SomeClass] {
  def create(name: String) = SomeClass(name)
}

(我假设您的意思是让 SomeFactory 扩展 Factory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2012-03-01
    • 2020-09-12
    相关资源
    最近更新 更多