簡體   English   中英

使用 Scala 對象中在 Java 代碼中具有隱式參數的函數

[英]Use functions from a Scala object that have implicit parameters in java code

有沒有辦法可以在我的 Java 代碼中使用fromJsontoJson方法? 我想調用它來將我從 mongoldb 獲得的 bson 文檔轉換為我在 Scala 中擁有的模型類

我的 Scala 對象在下面,

import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.{DefaultScalaModule, ScalaObjectMapper}

object JsonUtils {

  val mapper = new ObjectMapper() with ScalaObjectMapper

  mapper.registerModule(DefaultScalaModule)
  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

  def toJson(value: Map[Symbol, Any]): String = {
    toJson(value map { case (k,v) => k.name -> v})
  }

  def toJson(value: Any): String = {
    mapper.writeValueAsString(value)
  }

  def toMap[V](json:String)(implicit m: Manifest[V]) = fromJson[Map[String,V]](json)

  def fromJson[T](json: String)(implicit m : Manifest[T]): T = {
    mapper.readValue[T](json)
  }

  implicit class Marshallable[T](marshallMe: T) {
    def toJson: String = JsonUtils.toJson(marshallMe)
  }

  implicit class Unmarshallable(unMarshallMe: String) {
    def toMap: Map[String,Any] = JsonUtils.toMap(unMarshallMe)
    def fromJson[T]()(implicit m: Manifest[T]): T =  JsonUtils.fromJson[T](unMarshallMe)
  }
}

在 Java 代碼中,您必須手動解析 Scala 隱式。

嘗試調用fromJson類的

JsonUtils.fromJson("a", scala.reflect.Manifest.classType(LocalUser.class));

或者

JsonUtils$.MODULE$.fromJson("a", scala.reflect.Manifest$.MODULE$.classType(LocalUser.class));

基於從帶有 ClassTag 的 Java Play Framework 調用 Scala

關於toJson我看不出問題。 雖然如果你用Map參數調用toJson重載版本,也許你必須在scala.Predef.Map aka scala.collection.immutable.Mapjava.util.Map之間轉換

將 Java 映射轉換為 Scala 映射

如何使用 scala.Float 將 Scala Map 轉換為 Java Map 到 java.Float k/v 轉換

順便說一句, Manifest已被棄用,以支持ClassTag / TypeTag

https://docs.scala-lang.org/overviews/reflection/typetags-manifests.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM