2013-03-30 65 views
0

我有這個類擴展,超級構造函數和靜態方法

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

如果getRandomRobot屬於邏輯Tester,但不依賴於測試人員的狀態,你可以把它變成一個方法companion對象:

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

一種方法是隻是爲了打發sparringPartnersEasyTester的構造函數:

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