Функция Java для сопоставления содержимого JSONArray с данным классом? - PullRequest
0 голосов
/ 26 октября 2018

Использование Java 8. Я хочу создать универсальную функцию, которую можно использовать для отображения содержимого объекта JSONArray в определенный класс.Входными данными для этой функции будут JSONArray и объект класса, имеющий конструктор, который превратит отдельные JSONObject внутри JSONArray в соответствующий POJO.

Я хочу что-то вроде этого:

public static List<T> getObjectsFromJSONArray(Class T, JSONArray input) {
    return IntStream.range(0, input.length())
            .mapToObj(index -> (JSONObject)input.get(index))
            .collect(Collectors.toList())
            .forEach(jsonObj -> new T(jsonObj));
}

Не компилируется.Возможно, потому что я новичок в Java и не привык к этому, я хочу сделать это универсальной функцией.

Одним из возможных альтернативных решений является создание класса U<T>, который расширяет List и действует для всех намерений и целей как List<T>.Конструктор для U будет тогда принимать весь JSONArray, тогда мой код работает с указанным типом.Я уже видел эту реализацию в действии, но мне она кажется громоздкой.Дайте мне знать, если новый класс U действительно является «наилучшей практикой» для этого в Java.

1 Ответ

0 голосов
/ 27 октября 2018

Как насчет чего-то вроде

   public static <T> List<T> getObjectsFromJSONArray(Function<JSONObject, T> factory, JSONArray input) {
    return IntStream.range(0, input.length())
      .mapToObj(index -> factory.apply((JSONObject)input.get(index)))
      .collect(Collectors.toList());
  }

и затем вы используете его как

getObjectsFromJSONArray(YourObject::new, jsonarray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...