Класс, расширяющий ArrayList, не сериализуется должным образом - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу создать собственный список, который ведет себя подобно списку массивов, за исключением того, что он имеет один дополнительный атрибут. Я создал класс CustomList и провел тест в классе CustomListTest. Однако проблема в том, что дополнительный атрибут не отображается в сериализации json. Таким образом, код ниже только распечатывает [1,2,3]. Есть ли способ сделать это так, чтобы атрибут также был включен в сериализацию?

import java.util.ArrayList;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;


public class CustomList<T> extends ArrayList<T> {
    private boolean attribute = false;
}

public class CustomListTest {
    public static void main(String[] args) throws JsonProcessingException {
        CustomList<Integer> a = new CustomList<Integer>();

        a.add(1);
        a.add(2);
        a.add(3);

        ObjectMapper mapper = new ObjectMapper();

        System.out.println(mapper.writeValueAsString(a));
    }
}

1 Ответ

0 голосов
/ 02 ноября 2018

Проблема в том, что нет поля со списком имен. В JSON вы не можете добавлять атрибуты в массив. Если вы хотите получить сериализованную форму {"attribute": false, "list": []}, вам понадобится такой Java-объект:

private static class ComposeList<T> {
  boolean attribute = false;
  ArrayList<T> list = new ArrayList<>();
}

Как уже сказал chylis: «предпочитаю композицию наследованию». Это общее правило в Java. Наследование делает дизайн зачастую негибким.

...