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(map,new Array[SerializeFilter](0))
    println(mapStr)

结果如下:

{"empty":false,"traversableAgain":true}

就不会报错了!

最后:

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

发布了56 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/OldDirverHelpMe/article/details/103713625