我是Scala世界的新手! 我正在尝试开发一些助手,让我的生活更轻松的Scala代码。 例如,我试图让它工作的其中一个部分如下 -
object Helpers{
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def GetValueAs[T](key: String): T = self(key).asInstanceOf[T];
}
}
此代码背后的逻辑是我有一个String
到Any
映射,我需要在运行时强制转换值。我想在这里实现的并不重要,但重要的是我们如何在Scala中实现这一点。我怎样才能有一个适用于特定类型泛型类型的扩展方法(在本例中为Map[String, Any]
),该方法本身就是一种泛型类型。如果我尝试将它用作 -
myMap.GetValueAs[Date]("start_date")
错误:值GetValueAs不是scala.collection.immutable.Map的成员[String,Any]
有人可以帮助他找到他的简单例子。那将是一个很大的帮助,我很感激!
由于
答案 0 :(得分:3)
您需要将扩展方法纳入范围,即通过导入它们:
object Helpers {
implicit class MapExt(val self: Map[String, Any]) extends AnyVal {
// gets a map value for specified key casting as required type
def getValueAs[A](key: String): A = self(key).asInstanceOf[A]
}
}
import Helpers._ // !
Map("foo" -> 2, "bar" -> 3.45).getValueAs[Int]("foo") // works