Scala中Map的扩展方法

时间:2015-12-29 17:18:39

标签: scala generics extension-methods

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

有人可以帮助他找到他的简单例子。那将是一个很大的帮助,我很感激!

由于

1 个答案:

答案 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