来自Java库的对重载定义的模糊引用

时间:2014-04-28 02:22:27

标签: scala overloading scala-java-interop

我想将JsonPath的this example转换为Scala。使用java应该很容易:

List<String> authors = JsonPath.read(json, "$.store.book[*].author");

我转换为此Scala:

val authors = JsonPath.read(json, "$.store.book[*].author");

其中json是一个字符串。但是我得到了这个编译错误。

ambiguous reference to overloaded definition, both method read in object JsonPath of type [T](x$1: String, 
 x$2: String, x$3: <repeated...>[com.jayway.jsonpath.Filter[_]])T and method read in object JsonPath of type 
 [T](x$1: Any, x$2: String, x$3: <repeated...>[com.jayway.jsonpath.Filter[_]])T match argument types 
 (String,String)

我认为与

有关
public static <T> T read(Object json, String jsonPath, Filter... filters) 

public static <T> T read(String json, String jsonPath, Filter... filters) 

来自com.jayway.jsonpath.JsonPath(版本0.9.1)。

如何消除此函数调用的歧义?

1 个答案:

答案 0 :(得分:3)

对于这种特殊情况你可以做到

JsonPath.read(json.asInstanceOf[Object], "$.store.book[*].author")

这只会匹配一个重载方法(采用Object的方法)。据推测,该方法调用json.toString这是微不足道的,因为我们已经有String