Scala 使用FastJson:ambigous reference to overloaded definition

ScalaShi用FastJson报错:对重载方法的歧义应用的错误

完整的报错信息如下:

Error:(24, 28) ambiguous reference to overloaded definition,
both method toJSONString in object JSON of type (x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)String
and  method toJSONString in object JSON of type (x$1: Any)String
match argument types (java.util.Map[String,String]) and expected result type String
    val str: String = JSON.toJSONString(map)

目的:想将map类型转换为String类型
代码如下:

    val map: Map[String, Int] = Map("a" -> 1, "b" -> 2, "c" -> 3)
    val mapStr: String = JSON.toJSONString(map)
    println(mapStr)

报错原因:
因为JSON对象里面有很多toJSONString的重载方法:
相关源代码
第一个和第二个方法中,两个方法的第一个传入参数都是相同的,区别在于第二个传入的参数。可以看到第二个方法当中传入的参数是一个可变长度的参数。所以我的猜测就是因为这个可变长度的参数导致scala的编译器认为这两个方法都可以传入一个参数。所以报出了重载方法定义不明确的错误。

解决方案:

在这个代码当中,我想要调用的是第一个toJSONString的方法。可以看到里面实际上只有一行代码

return toJSONString(object,emptyFilters)

emptyFilter的参数,我用ctrl+鼠标左键进行了追踪,发现它是这样定义的;
toJSONString的相关源代码
所以,我这里调用的代码改一下就好了:

    val map: Map[String, Int] = Map("a" -> 1, "b" -> 2, "c" -> 3)
    val mapStr: String = JSON.toJSONString(JavaConverters.mapAsJavaMapConverter(map).asJava,new Array[SerializeFilter](0))
    println(mapStr)

结果如下:

{"a":1,"b":2,"c":3}

就不会报错了!

最后:

如果有哪里写得不对,请在下方讨论,谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值