2017-03-01 8 views
1

のようなものがオプションにどれをキャスト?同等の標準ライブラリはありますか?Scalaは[T]

のはなぜですかとどのように私は次のScalaコンパイラの警告解決します:

Warning:(7, 13) abstract type pattern T is unchecked since it is eliminated by erasure 
    case v: T => Some(v) 
+1

あなたは特別な方法は必要ありません: 'scala.util.Try(o.asInstanceOf [T])をtoOption' – Yawar

+0

ことが最もある@Yawar厳密に標準ライブラリに依存していますが、フロー制御として例外を使用する必要があります。それは動作しますが、私はパムの解決策をとるでしょう。 – clay

答えて

2

使用クラスタグを。タイプ情報は実行時に失われます。クラスタグを使用して行うことができるタイプ情報を提供する必要があります。

import scala.reflect.ClassTag 

def cast[T: ClassTag](o: Any): Option[T] = o match { 
case v: T => Some(v) 
case _ => None 
} 

ScalaのREPL

scala> cast[String]("hello") 
res2: Option[String] = Some(hello) 

scala> cast[Int]("scala") 
res3: Option[Int] = None 
+2

これで 'cast [List [String]](List [Int](1,2,3))'を試してみてください。 –

関連する問題