JsonArray.getvaluesAs不将String.class作为参数

时间:2014-09-23 08:57:40

标签: java json arrays

我正在使用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>,但我尽量避免这种情况,所以是否有针对上述错误的简单修复?

3 个答案:

答案 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;
}