JsonArray.getvaluesAs不接受String.class作为参数。

6

我正在使用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>,但我尝试避免这样做,那么有没有简单的解决以上错误的方法?


@aegean 嗯,我试过了,还是出现了同样的错误。 - nafas
如果有人看到这个:不要使用javax.Json.JsonArray类,它快让我哭了... - nafas
3个回答

8

0

我很久以前使用过这个库。 据我记得,你只能将一个继承自JsonValue的类传递到“getValuesAs()”方法中。这就是为什么字符串不起作用的原因。你需要尝试另一种方法。 抱歉,我不记得那是哪种方法了。


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

getValuesAs(JsonString.class).stream().map(JsonString::getString).collect(Collectors.toList()) - Stefan Höltker
List<String> list = jsonArray.getValuesAs(JsonString::getString); 可以更简洁... - David Bosschaert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接