我正在使用javax.Json.JsonArray
对象。
方法:javax.Json.JsonArray.getvaluesAs(Class<T>)
将JsonArray
作为列表返回。所以我想要做的是将List
变成Set
。这就是我的所作所为:
Set values= new HashSet(myjsonArray.getValuesAs(null));
这很好用,但我知道myjsonArray
只包含String
。所以我真正想做的是:
Set<String> values= new HashSet(myjsonArray.getValuesAs(String.class));
由于上述代码的某些原因,我得到编译器错误:
The generic method getValuesAs(Class<T>) of type JsonArray is not applicable for the arguments (Class<String>). The inferred type String is not a valid substitute for the bounded parameter <T extends JsonValue>
我可以使用循环构建我的Set<String>
,但我尽量避免这种情况,所以是否有针对上述错误的简单修复?
答案 0 :(得分:6)
getValuesAs()方法仅支持扩展JsonValue的类。在这种情况下,您可以使用JsonString.class,然后将其简单地转换为String。
检查这个(http://docs.oracle.com/javaee/7/api/javax/json/JsonArray.html#getValuesAs-java.lang.Class-)你可以看到T扩展了JsonValue
答案 1 :(得分:0)
很久以前我使用过这个库。 从我记忆中,你只能将一个类传递给从JsonValue扩展的“getValuesAs()”方法。这就是为什么字符串不起作用。你将不得不尝试另一种方法。 对不起,我不记得它是哪种方式。
答案 2 :(得分:0)
由于Nine表示“ getValuesAs()方法仅支持扩展JsonValue的类”
这是我解决这个问题的方法(也是唯一可行的):
private static List<String> toList(JsonArray json){
List<String> list = new ArrayList<String>();
if (json != null){
for (JsonString elm: json.getValuesAs(JsonString.class)){
list.add(elm.getString());
}
}
return list;
}