指特征的自我类型

ja

我编写了一个特征,以利用现有的JSON Writes实例将自身序列化以查询字符串参数的能力混入类中。为了使用Writes实例作为参数,我需要知道此特征混合到的类型。我使用类型参数(应该是类本身)和自类型注释来得到。我想知道是否有这样做的DRYer方式,不需要type参数?

这是我的代码:

trait ConvertibleToQueryString[T] {
  this: T =>

  /** Transformation of field names in obj to query string keys */
  def objToQueryStringMapping: Map[JsPath, JsPath] = Map.empty

  /**
   * Convert a model to a Map, for serialization to a query string, to be used
   * in a REST API call.
   * @param writes writer for `obj`
   * @return
   */
  def toQueryStringMap(implicit writes: Writes[T]): Map[String, String] = {
    // Get a map of key -> JsValue from obj
    val mapObj = Json.toJson(this).transform(moveKeys(objToQueryStringMapping)).get.value

    // Convert the JsValue values of the map to query strings
    mapObj.mapValues(jsValueToQueryStringValue).filter(_._2.nonEmpty).toMap
  }
}

,其用途如下:

case class MyClass(param1: String, param2: Int) extends ConvertibleToQueryString[MyClass]

,最后一个类型参数是令我烦恼的事情。它完全不受限制,但实际上应该只是“我混入的类的类型”。有没有办法表达这一点?

有翼的潜艇

为什么不使用pimp- encrich -我的图书馆模式:

implicit class ConvertibleToQueryString[T: Writes](x: T) {
  def objToQueryStringMapping: Map[JsPath, JsPath] = Map.empty

  def toQueryStringMap: Map[String, String] = {
    // Get a map of key -> JsValue from obj
    val mapObj = Json.toJson(x).transform(moveKeys(objToQueryStringMapping)).get.value

    // Convert the JsValue values of the map to query strings
    mapObj.mapValues(jsValueToQueryStringValue).filter(_._2.nonEmpty).toMap
  }
}

现在,您根本不需要extends ...要序列化的类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指特征的自我类型

来自分类Dev

具有通用自我类型的Scala特征

来自分类Dev

在参数化特征中引用自我类型

来自分类Dev

自我通用类型

来自分类Dev

如何使用Scala反射来找到自我类型特征?

来自分类Dev

在Rust中,如何使自我成为特征?

来自分类Dev

Swift元类型(类型,自我)

来自分类Dev

没有任何阶级/特征的裸自我型

来自分类Dev

特征默认方法中的多个自我借用

来自分类Dev

解决失去对类型约束的自我支持

来自分类Dev

类型提示子类返回自我

来自分类Dev

在Scala中创建自我类型的实例

来自分类Dev

具有自我类型要求的协议的类型擦除

来自分类Dev

自我类型注释后面的Scala构造是什么?

来自分类Dev

在PHPStorm中键入提示“静态”和“自我”的类型

来自分类Dev

特质自我类型限制:A与B而不是A与C

来自分类Dev

使用包含自我类型的道具创建演员

来自分类Dev

是否有诸如“无界自我类型”之类的东西?

来自分类Dev

自我作为通用回调的参数类型

来自分类Dev

我可以重载带有类型特征的函数吗?

来自分类Dev

我可以重载带有类型特征的函数吗?

来自分类Dev

普通类型的类型特征

来自分类Dev

普通类型的类型特征

来自分类Dev

自我评估Javascript

来自分类Dev

Ruby追踪自我

来自分类Dev

别名自我加入

来自分类Dev

多态自我应用

来自分类Dev

自我加入桌子

来自分类Dev

自我加入MySQL