当前位置: 首页 > 知识库问答 >
问题:

Scala:不能对抽象泛型超类进行子类化

宿衡虑
2023-03-14

我试图在Scala中返回抽象泛型类的子类,但它无法编译。我得到A类型的表达式不符合预期的B类型。这是我使用的代码:

abstract class AA[T](val var1: String){
  def doSomething(): T;
}
class BB(override val var1: String) extends AA[Int](var1){
  override def doSomething(): Int = {
    return 5
  }
}

object Factory {
  def create(v: String) : AA[Any] = {
  return new BB("5") // this is the error
  }
}

创建()的签名应该是什么?

谢谢

共有1个答案

漆雕和昶
2023-03-14

BB扩展了AA[Int]但是Factory.create声称返回一个AA[任何]。您可以通过在T中制作AA协变来解决此问题:

abstract class AA[+T](val var1: String){
  def doSomething(): T
}
 类似资料:
  • 我有一个子类,它声明了我的抽象超类中的所有方法,但它仍然给我一个错误,说明我的类不是抽象的。我不知道为什么会抛出这个错误。 我得到的具体错误是 PhoneBookEntry.java: 1:错误:PhoneBookEntry不是抽象的,并且不会覆盖可比中的抽象方法compareTo(Object) 我的问题代码: 还有我的子类:

  • “绑定不匹配:Team类型不是league类型 的有界参数 >的有效替代品。”

  • 假设您有以下抽象java类: 以及以下子类层次结构: 假设您需要在超类上的给定点使用泛型类型,例如,为了在构造函数上使用gson库将请求json反序列化到特定的请求对象,如下所示: 您需要变量“typeOfI”中的泛型I类型 是否有一个全局解决方案,允许获得由尊重以下约束的具体子类指定的泛型类型? 该类型是在运行时获取的,与子类的层次结构无关(这个问题的示例可能更复杂) 开发人员只需要定义泛型来扩

  • 在我的Spring Boot应用程序中,我尝试实现模板方法,在我的具体类中,我尝试使用泛型,如下所示: 模板界面:不确定我是否需要使用它? 模板抽象类: 混凝土等级: 我在dto中得到“无法解析‘T’中的方法‘getName’”。getName()行输入AbstractPDFGenerator。 我的问题是: 1.为了解决这个问题,我想从继承和的基类扩展T。但是,我不想从基类继承它们,因为它们没有

  • 问题内容: 我有一个像这样的课程: 但是编译器说:。 我如何获得的课程? 问题答案: 绝对有可能将其提取出来,因为它不是在运行时定义的,而是在编译时由定义的。 这是一个启动示例,您可以如何在抽象类的构造函数中提取所需的泛型超类型,同时考虑子类的层次结构(以及在无需显式提供类型的情况下将其应用于泛型方法的实际用例)):

  • 假设我们有一个泛型类: 然后,我们希望将与和的进行模式匹配: