我想在抽象類中定義一個構造函數來創建具體的子類。構造基類抽象類的子類
abstract class A {
type Impl <: A
def construct() : Impl = {
val res = new Impl() //compile error: class type required but A.this.Impl found
// do more initialization with res
}
}
class B extends A {type Impl = B}
class C extends A {type Impl = C}
//...
val b = new B
b.construct() // this should create a new instance of B
這裏有什麼問題?這甚至有可能實現嗎? 編輯:說明:我想通過構造方法進行抽象。我不想分別從子類或伴隨對象調用new B
和new C
。
通過避免調用新的B或新的C可以獲得什麼好處? – Monkey 2011-01-31 06:56:16
我可能有許多子類(B,C,D,...),我想避免重複/樣板代碼。 – Adrian 2011-01-31 07:27:16
你可以做你想做的唯一方法就是使用反射。正如我在答覆中所述,這不是一個好主意。 – Monkey 2011-01-31 07:53:43