【发布时间】:2016-04-03 14:48:06
【问题描述】:
我是 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] 的成员
有人可以帮助让他的简单示例起作用。这将是一个很大的帮助,我很感激!
谢谢
【问题讨论】:
-
它对我有用。您是否将隐式类纳入范围。 IE。你在打电话给
myMap.GetValueAs之前import Helpers._了吗?这应该就是所需要的。 -
你为什么有
extends AnyVal?这有意义吗,即在这种情况下你会享受它的好处吗? -
我们在 Scala 中不将方法名大写。改用
getValueAs -
因为我在同一个范围内,我认为它会自动完成,但显然它没有:(感谢帮助
-
@KevinMeredith 基于 Scala 文档,如果您不这样做,它将在运行时为此创建一个对象;否则,它没有任何其他好处!
标签: scala generics extension-methods