Scala 中 Map 的扩展方法

Extension Method for Map in Scala

我是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];
  }
}

这段代码背后的逻辑是我有一个 StringAny 的映射,我需要在 运行 时间转换值。我在这里试图实现的目标并不重要,重要的是我们如何在 Scala 中做到这一点。我怎样才能拥有适用于特定泛型类型(在本例中为 Map[String, Any])的扩展方法,并且该方法本身就是泛型类型。如果我尝试将它用作 -

,上面的代码会给我一个编译时错误
myMap.GetValueAs[Date]("start_date")

错误:值 GetValueAs 不是 scala.collection.immutable.Map[String,Any]

的成员

有人可以帮忙让他的简单示例正常工作吗?这将是一个很大的帮助,我很感激!

谢谢

您需要将扩展​​方法纳入范围,即通过导入它们:

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