#java
#java
Вопрос:
Я хочу написать универсальную функцию для анализа строки json (stringEtcdContent ниже в коде). Строка содержит список объектов с ключом «значение». Я анализирую json в дерево, получаю список JsonNode (valueNodes ниже) со строкой для анализа с использованием универсального класса. Класс, в котором у меня есть функция, таков: «общедоступный абстрактный класс DashboardReportProvider». Основываясь на аналогичном вопросе здесь, я написал эту функцию:
@SuppressWarnings("unchecked")
public List<T> getStatusList(String path) {
Class<T> clazz;
clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
List<T> statusList = new ArrayList<>();
T statusItem;
ObjectMapper mapper = new ObjectMapper();
try {
String stringEtcdContent = etcdCommandExecutor.getEtcdValue(path);
JsonParser parser=new MappingJsonFactory().createParser(stringEtcdContent);
JsonNode rootNode=parser.readValueAsTree();
List<JsonNode> valueNodes=rootNode.findValues("value");
Iterator<JsonNode> valueNodesIterator=valueNodes.listIterator();
while (valueNodesIterator.hasNext()) {
JsonNode valueNode=(JsonNode)valueNodesIterator.next();
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
String valueString = writer.writeValueAsString(valueNode);
statusItem = mapper.readValue(valueString, clazz);
statusList.add(statusItem);
}
return statusList;
} catch (Exception e) {
LOG.error(e.getMessage());
}
return statusList;
}
Он компилируется нормально, но когда я пытаюсь запустить код, я получаю эту ошибку:
«[ОШИБКА] java.lang.Класс не может быть приведен к java.lang.reflect.ParameterizedType «. Что не так?
Комментарии:
1. Класс — это объект, который реализует несколько интерфейсов, включая тип интерфейса. Вы пытаетесь преобразовать ParameterizedType в Class
2. Однако ParameterizedType не расширяет все те же интерфейсы, что и реализации класса, следовательно, это приведение невозможно
Ответ №1:
Попробуйте ObjectMapper ,
new ObjectMapper().readValue(path,Object.class);
где Object.class — приведение к типу