如何用泛型扩展抽象类?

标记

我是Scala的新手。我想做的是创建一个名为的抽象类,该类EnhancedFirstOrderMinimizer扩展了另一个名为的抽象类FirstOrderMinimizer但是,IDE告诉我“ Type mismatch, expected: nothing, actual: DF”。

这是FirstOrderMinimizer:

abstract class FirstOrderMinimizer[T, DF <: StochasticDiffFunction[T]]
    (maxIter: Int = -1, tolerance: Double = 1E-6, improvementTol: Double = 1E-3,
     val minImprovementWindow: Int = 10,
     val numberOfImprovementFailures: Int = 1)
    (implicit space: NormedModule[T, Double])
    extends Minimizer[T, DF] with SerializableLogging {

protected def initialHistory(f: DF, init: T): History
  ...
  type History
  protected def initialHistory(f: DF, init: T): History
  protected def adjustFunction(f: DF): DF = f
  protected def adjust(newX: T, newGrad: T, newVal: Double): (Double, T) =
    (newVal, newGrad)
  protected def chooseDescentDirection(state: State, f: DF): T
  protected def determineStepSize(state: State, f: DF, direction: T): Double
  protected def takeStep(state: State, dir: T, stepSize:Double): T
  protected def updateHistory(newX: T, newGrad: T, newVal: Double,
                              f: DF, oldState: State): History

  def iterations(f: DF, init: T): Iterator[State] = {
    val adjustedFun = adjustFunction(f)
    infiniteIterations(f, initialState(adjustedFun, init))
      .takeUpToWhere(_.converged) 
  }
  ...
}

这里是EnhancedFirstOrderMinimizer

EnhancedFirstOrderMinimizer[T, DF<:StochasticDiffFunction[T]]
    (maxIter: Int = -1, tolerance: Double=1E-6, improvementTol: Double=1E-3)
    extends FirstOrderMinimizer {

  override def iterations(f: DF, init: T): Iterator[State] = {
    val adjustedFun = adjustFunction(f)

    // f: Type mismatch, expected: nothing, actual: DF
    infiniteIterations(f, initialState(adjustedFun, init))
      .takeUpToWhere(_.converged)
  }
}

你能帮我看看吗?

克里斯·马丁

编译器告诉您f的第一个参数类型错误infiniteIterations我们可能需要查看infiniteIterations声明在哪里才能确切了解正在发生的事情。

但是我认为扩展问题的快速答案是extends FirstOrderMinimizer应将其更改为extends FirstOrderMinimizer[T, DF]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展泛型抽象类:正确的边界

来自分类Dev

语言:如何使用泛型将抽象类扩展到两个级别

来自分类Dev

如何实现抽象类的泛型字段?

来自分类Dev

泛型抽象类继承

来自分类Dev

泛型T是抽象类的实现

来自分类Dev

动态分配使用泛型扩展抽象类的具体类

来自分类Dev

扩展抽象类

来自分类Dev

扩展抽象类

来自分类Dev

如何从使用泛型进行键入的抽象类中重写方法?

来自分类Dev

使用泛型在抽象类中调用构造函数

来自分类Dev

用泛型实例化抽象类的对象

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

Java抽象类使用泛型实现

来自分类Dev

泛型类型可以实现多个抽象类吗?

来自分类Dev

继承需要构造函数的泛型类型的抽象类

来自分类Dev

C ++ / Qt中具有泛型的抽象类

来自分类Dev

使用泛型在抽象类中调用构造函数

来自分类Dev

使用Java泛型接口/抽象类的构造方法

来自分类Dev

Java抽象类使用泛型实现

来自分类Dev

@JvmField 关于泛型/抽象类的属性

来自分类Dev

打字稿类型、泛型和抽象类

来自分类Dev

在具有不同泛型参数的抽象类中返回泛型是不好的做法

来自分类Dev

嵌套泛型/抽象类C#中的嵌套泛型的继承

来自分类Dev

我如何用抽象类设计这些

来自分类Dev

如何使地图返回扩展了抽象类的类?

来自分类Dev

如何将泛型类扩展为泛型

来自分类Dev

如何使用工厂构造函数扩展抽象类?

来自分类Dev

(Scala)如何扩展抽象类的apply方法?

来自分类Dev

如何在抽象类中实现扩展方法