Scala是可赋值的从Scala和Java原语

  • 本文关键字:Scala Java 原语 赋值 scala
  • 更新时间 :
  • 英文 :


我有一个地图扩展方法

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。布尔值,类型参数用于scala。布尔值,那么这行不通。我想这对于Int、Long等也是一样的。

有什么明显的方法可以解决这个问题吗?

这是一个蛮力解决方案

  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]
  }

最新更新