Java-класс, Arraylist с несколькими типами

Я новичок в Android и Java, и у меня есть вопрос, касающийся связи между сервером и приложениями. Мой сервер всегда возвращает вывод JSON с "Code", "Message" и "Data". Как это:

e.g: {"code":200,"msg":"success","data":[{"track_id":123},{"track_id":124},{"track_id":125}]}
e.g: {"code":200,"msg":"success","data":[{"type":"car","length":100},{"type":"train","length":500},{"type":"foot","length":3}]}

Я хочу использовать такой класс для работы с данными:

public class ServerResponse {
    private int code;
    private String msg;
    private List<> data;
}

Но вот моя проблема. Я не хочу указывать в списке определенный тип, например "машина", "логин" и т. Д. В зависимости от моего запроса я хочу создать класс ServerResponse с типом списка "car", другой с типом списка "Locations" и т. Д.

Есть ли способ использовать класс ServerResponse с несколькими типами ArrayLists или мне нужно копировать этот класс несколько раз для каждого типа списка, который я хотел бы использовать?

Извините, если где-то здесь уже есть решение, но я не знаю, что мне нужно искать. И то, что я искал, я не мог найти правильное решение.

С наилучшими пожеланиями Майкл

2 ответа

Решение

Посмотрите на общие типы Java.

public class ServerResponse<T> { 
    private int code;
    private String msg;
    private List<T> data;
} 

T может быть любого типа, который вы хотите, поэтому ваш список будет такого типа. Тогда ваши методы получения / установки могут возвращать или принимать тип T.

Теперь давайте предположим, что ваш ответ был для объекта Car. Вы бы сделали это

private ServerResponse<Car> mCarResponse = new ServerResponse<>();

Теперь вы можете поместить метод в ваш класс ServerResponse следующим образом.

public class ServerResponse<T> { 
    private int code;
    private String msg;
    private List<T> data;

    public List<T> getResponseObjectList(){
        return data;
    }
} 

Теперь вы получите List<Car> объект.

Вы могли бы сделать Serverrespone универсальным, а также.

public class GenericResponse <T>{
   private int code;
   private String msg;
   private List<T> data;
}
Другие вопросы по тегам