мой вопрос не тот же этот вопрос . если я хочу объяснить, давайте предположим, что у нас есть эти классы (A, B, C).
@Data
@NoArgsConstructor
class A {
private Integer x;
private String type;
public A(String type, Integer x) {
this.type = type;
this.x = x;
}
}
@Data
class B extends A {
private Integer y;
public B(Integer x, Integer y) {
super("B", x);
this.y = y;
}
}
@Data
class C extends A {
private Integer z;
public C(Integer x, Integer z) {
super("C", x);
this.z = z;
}
}
знаю, что я хочу проанализировать массив, базовыми классами которого являются A. и со свойством с именем type я хочу преобразовать каждый элемент в его специфицированный c класс. что-то вроде этого кода.
public static void main(String[] args) {
Gson gson = new Gson();
List<A> list = new ArrayList<>();
A a = new A("A", 0);
list.add(a);
B b = new B(1, 2);
list.add(b);
C c = new C(3, 4);
list.add(c);
String serializedJson = gson.toJson(list);
List<? extends A> deserializedList = gson.fromJson(serializedJson, new TypeToken<List<? extends A>>() {
}.getType());
for (A item : deserializedList) {
System.out.println(item.getType());
if (item instanceof B) {
System.out.println(((B) item).getY());
} else if (item instanceof C) {
System.out.println(((C) item).getZ());
}
}
}
сериализовано json это что-то вроде
[{"x":0,"type":"A"},{"y":2,"x":1,"type":"B"},{"z":4,"x":3,"type":"C"}]
в реальном мире, у меня есть что-то вроде json и я хочу разобрать его. но когда я запускаю код, свойства y и z не печатаются, и объекты не являются экземплярами B или C. Как достичь этой цели, чтобы разобрать и создать каждый элемент со свойством типа.