タイプ のマップがあり、Map[_, Any]
( に頼らずに) ネイティブ形式で値を抽出したい.asInstanceOf[_]
。
このようなもの...
val m: Map[String, Any] = Map("i" -> 1, "s" -> "test")
val i: Option[Int] = m.get("i")
val s: Option[String] = m.get("s")
明らかにそれは失敗します。
私はこのアプローチが好きではありませんが、私はこのようなことができると思っていました...しかし、これでもorAny
の代わりに出てきます。Int
String
trait MyType[A] {
def value: A
}
implicit class MyInt(i: Int) extends MyType[Int] { def value: Int = i }
implicit class MyString(s: String) extends MyType[String] { def value: String = s }
val m: Map[String, MyType[_]] = Map("i" -> 1, "s" -> "test")
val i: Option[Int] = m.get("i").map(_.value)
val s: Option[String] = m.get("s").map(_.value)
それから私は多分いくつかのラッパーを考えましたMap
...
case class MyMap(m: Map[String, Any]) {
def get[A](k: String)(implicit ev: Option[Any] => Option[A]): Option[A] = m.get(k)
}
しかし、それはまだとして出てきAny
ます。Any => native に変換する方法がわかりません。
だから私の質問は...
- なぜこれが失敗するのですか?
- ネイティブ形式で値を取得するためのより良い方法は何ですか? 最も単純で、かつ/または外部依存関係がないことが理想的です...しかし、私は正直に何に対してもオープンです(ただし、今のところまだscala 2.11を使用していることに注意してください)。
ありがとう!