by shigemk2

当面は技術的なことしか書かない

unchecked since it is eliminated by erasure

Scalaは、Javaと同様の消去モデル(erasure model)のジェネリックプログラミングを使っており、実行時に型引数の情報を管理しない。

これは型消去と呼ばれ、コップ本の270-272あたりに書いてある。配列だけが型消去の例外と言われるが、具体的な回避方法はよくわからない。すくなくともこのパターンにおいては。

val a = Some(List(1, 2, 3))
val b = Some("hoge")

def printmatch[A](a: Option[A]) = a match {
  // warning: non-variable type argument List[Int] in type pattern Option[List[Int]] is unchecked since it is eliminated by erasure
  case a: Option[List[Int]] => println("option list int")
  case _ => println("i have no idea")
}

printmatch(a) // option list int
printmatch(b) // option list int // 期待してたのと違う

d.hatena.ne.jp

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

  • 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
  • 出版社/メーカー: インプレスジャパン
  • 発売日: 2011/09/27
  • メディア: 単行本(ソフトカバー)
  • 購入: 12人 クリック: 235回
  • この商品を含むブログ (46件) を見る