gpt4 book ai didi

scala - 向 Map 添加 getAs[T] 方法

转载 作者:行者123 更新时间:2023-12-01 22:22:06 25 4
gpt4 key购买 nike

我想向 Map 添加一个 getAs[T](key) 方法,该方法将返回值 asInstanceOf[T] ,我发现当值类型为 Any 时很有用。这是我使用特质的尝试。

trait MapT extends Map[Any, Any] {
def getAs[T](key: Any): T = super.apply(key).asInstanceOf[T]
}
val map = new Map[Any,Any] with MapT

但是,编译器不会让我这样做,因为 +-iteratorget > 方法没有定义,我真的不想定义。

我该如何去做呢?是否有更好的方法 getAs[T]

最佳答案

您可以使用丰富我的图书馆模式(以前​​的皮条客我的图书馆):

class MapT(underlying: Map[Any,Any]) {
def getAs[T](key: Any): T = underlying.apply(key).asInstanceOf[T]
}

implicit def map2MapT(m: Map[Any,Any]) = new MapT(m)

现在您所需要做的就是在您想要使用 getAs 的地方保留导入 map2MapT 。

在 scala 2.10 中,您可以使用所谓的隐式类并编写相同的内容:

implicit class MapT(underlying: Map[Any,Any]) {
      def getAs[T](key: Any): T = underlying.apply(key).asInstanceOf[T]
}

如果您不想生成包装器,您可以使用另一个 2.10 功能 - 值类:

implicit class MapT(val underlying: Map[Any,Any]) extends AnyVal {
      def getAs[T](key: Any): T = underlying.apply(key).asInstanceOf[T]
}

因此编译器将剪切 MapT 类并在每个调用站点保留 getAs[T] 方法内联。

关于scala - 向 Map 添加 getAs[T] 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com