0
我有一個具有兩個參數和另一個參數構造函數的Scala類。對於一個參數構造函數,我調用了一個方法來獲取兩個元素的元組,並嘗試將元組用作需要兩個參數的構造函數的參數。從這個職位:Scala tuple unpacking for constructors我可以得到一個非繼承的情況下的答案,但我需要使用繼承的情況下的方法。斯卡拉元組解包用於繼承的抽象類構造函數
這是我的代碼,但我不知道如何實例化抽象類。
abstract class A(val a:Int, val b:Int) {
def h()// = ???
}
object A {
def apply(pair: (Int, Int)): A = new A(pair._1, pair._2)
def apply(v: Int): A = A(vals(v))
def vals(v:Int) = {
(v,v)
}
}
class B(override val a:Int, override val b:Int) extends A(a,b) {
override def h() = ???
}
object B {
def apply(pair: (Int, Int)): B = new B(pair._1, pair._2)
def apply(v: Int): B = B(A.vals(v))
}
object Main extends App {
val a = B(10)
println(a.a, a.b)
}
當然,如果我試圖實例化抽象類,我收到了錯誤消息。
error: class A is abstract; cannot be instantiated
def apply(pair: (Int, Int)): A = new A(pair._1, pair._2)
^
我認爲最簡單的解決方法就是使抽象類非抽象,並給虛擬主體def h() = ???
。不過,我不確定有沒有更好的方法。
由於一個'A'不能直接實例化,沒有必要這裏的構造函數或工廠方法吧 - 放棄對'A'同伴對象(以及在移動'vals'方法'乙你的同伴對象),你應該沒問題。 – Shadowlands
@Shadowlands:我很感謝。 – prosseek