読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

型パラメータ

beginner's guideの「8 Genericity」より。Scalaでも型パラメータを使うことができます。

  • 「class <クラス名>[<型パラメータ>] ...」といった感じで、「[]」を使って指定します。(Javaと違って「<,>」ではないです。)
  • 使い方はJavaと同じ感じです。(beginner's guideの「8 Genericity」を読む限りは。)

サンプル。

// 型パラメータを受け取るクラス
class Holder[a](value:a) {
  
  private var v: a = value
  
  // getter
  def get:a = { v }
  // setter
  def set(value:a):unit = { v = value }
}

// クラスを使うサンプル
object Sample {
  def main(args: Array[String]) {
    
    // クラスのインスタンスを生成。 
    // 型パラメータで「int」を指定
    var h = new Holder[int]( 1 )
    println( h.get )
    
    h.set(100)
    println( h.get )
    
    // 型パラメータを「String」にした場合
    var h2 = new Holder[String]( "foo" )
    println( h2.get )
    
    h2.set("var")
    println( h2.get )
  }
}

実行結果です。

1
100
foo
var


次のようにするとコンパイル時にエラーになります。

// クラスを使うサンプル
object ErrorSample {
  def main(args: Array[String]) {
    
    // ↓これはエラー
    var h3 = new Holder[String]( "foo" )
    h3.set(100)
    var h4 = new Holder[int]( 1 )
    h4.set("foo")
    
    // こういうのもエラーになる
    h3 = h4
  }
}

コンパイル結果です。

$ scalac GenericsErrorSample.scala 
GenericsErrorSample.scala:19: error: type mismatch;
 found   : Int(100)
 required: String
    h3.set(100)
           ^
GenericsErrorSample.scala:21: error: type mismatch;
 found   : java.lang.String("foo")
 required: int
    h4.set("foo")
           ^
GenericsErrorSample.scala:24: error: type mismatch;
 found   : Holder[int]
 required: Holder[String]
    h3 = h4
         ^
three errors found