Java class, Arraylist with multiple types

960 Views Asked by At

i'm new to Android & Java and have a question regarding my server-app-communication. My server always returns a JSON output with "Code", "Message" and "Data". Like this:

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}]}

I want to use a class like this to work with the data:

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

But here is my problem. I don't want to give a specific type like "car", "login" etc. to the List. Depending on my request I want to create the ServerResponse-class with a List-Type "car", another with List-Type "Locations" etc.

Is there a way to use the class ServerResponse with multiple type of ArrayLists or do I have to copy this class several times for every list-type I'd like to use?

I'm sorry if there's already a solution somewhere here, but I do not know what I have to search for. And for what I searched, I couldn't find a propper solution.

Best regards Michael

2

There are 2 best solutions below

2
On BEST ANSWER

Look into Java Generic Types.

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

T can be whatever type you want it to be, so your list will then be of that type. Then your getter/setter methods can return or accept type T.

Now let us assume your response was for a Car object. You would do this

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

Now you can put a method inside your ServerResponse class like this.

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

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

You will now get a List<Car> object.

0
On

You could make the Serverrespone generic aswell.

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