2011年1月11日火曜日

Scalaで親クラスのオーバーロードコンストラクタを使用する

結論:Scalaで継承を行った際に、親クラスのオーバーロードされたコンストラクタを使用する方法は、ありません

どんなコードを書きたいかを、Javaで書くと


class A{
public A(){}
public A(int v){}
}
class B extends A{
public B() {super();}
public B(int v){super(v);}
}


になりますが、これをScalaで書こうとした場合、scalaではPrimaryConstructorを除くコンストラクターを呼び出せないため、単純に上記のようなコードを移植することは出来ません。

一応解決策を3つほど紹介

諦める



こんなコードは書かないようにしましょう。

デフォルト値を代入



デフォルト値がわかる場合は、デフォルト値を入れてやる

class A(){
def this( v: Int) = this()
}

class B(v : Int) extends A(v){
def this() = this(0)
}


複数のクラス作成




class A(){
def this( v: Int) = this()
}

class B1(v : Int) extends A(v)

class B2 extends A

1 件のコメント:

  1. Ahaa, its fastidious dialogue about this post at this place at this website, I have read all that,
    so at this time me also commenting at this place.

    Feel free to surf to my blog: cellulite treatment reviews

    返信削除