扩展,超级构造函数和静态方法

时间:2013-03-30 17:58:03

标签: scala

我有这个班级

class Tester(round: Int, x: Int, y: Int,sparringPartners:Array[RobotSpecification]) {
  def this(s:Array[RobotSpecification]) = {
    this(5, 800, 600, s)

  }

 def getRandomRobot(eng: RobocodeEngine): Array[RobotSpecification] = {//blabla}
}

我想扩展做这样的事情

class EasyTester() extends Tester(getRandomRobot()){}

显然它不起作用。

问题可能是微不足道的,但我刚刚接近Scala的OO部分,所以我从未使用过这些东西。

1 个答案:

答案 0 :(得分:1)

如果getRandomRobot在逻辑上属于Tester,但不依赖于测试人员的状态,则可以将其转换为companion对象上的方法:

object Tester {
    def getRandomRobot(eng: RobocodeEngine): Array[RobotSpecification] = { ... }
}

一种方法就是将sparringPartners传递给EasyTester的构造函数:

class EasyTester(sparringPartners: Array[RobotSpecification]) extends Tester(sparringPartners) { ... }

import Tester._
val eng = ...
val easyTester = new EasyTester(getRandomRobot(eng))

为了使实例化更简单,EasyTester可以有一个带有apply方法的伴随对象来实例化它:

import Tester._
object EasyTester {
    def apply(implicit eng: RobocodeEngine) = {
      new EasyTester(getRandomRobot(eng))
   }
}

implicit val eng: RobocodeEngine = ...
val easyTester = EasyTester