0

マップ拡張メソッドがあります

def getAs[T : Manifest](key: String): Option[T] =
  m.get(key) collect { 
    case v if manifest[T].erasure.isAssignableFrom(v.getClass) => v.asInstanceOf[T]
  }

キー値を取得し、割り当て可能な場合は目的の型にキャストします。ストア アイテムが java.lang.Boolean で、type パラメータが scala.Boolean の場合、これは機能しません。これは Int や Long などでも同じだと思います。

これを回避する明らかな方法はありますか?

4

1 に答える 1

0

これは力ずくの解決策です

  def getAs[T : Manifest](key:String):Option[T] = m.get(key) collect {
    case v if manifest[T].erasure.isAssignableFrom(v.getClass)    => v.asInstanceOf[T]
    case i:java.lang.Integer if manifest[T] == manifest[Int]      => i.asInstanceOf[T]
    case l:java.lang.Long if manifest[T] == manifest[Long]        => l.asInstanceOf[T]
    case f:java.lang.Float if manifest[T] == manifest[Float]      => f.asInstanceOf[T]
    case d:java.lang.Double if manifest[T] == manifest[Double]    => d.asInstanceOf[T]
    case b:java.lang.Boolean if manifest[T] == manifest[Boolean]  => b.asInstanceOf[T]
  }
于 2013-01-15T14:57:18.570 に答える