What is Type & TypeToken?

Android picture Android · Mar 30, 2017 · Viewed 26.7k times · Source

I have the following method in my project

 public void execute(final int apiId, final ResponseHandler handler, final Type type)

and the type is determined using TypeToken as follows

final Type serviceErrorType = new TypeToken<>() {
    }.getType();

I went through this link here but couldn't understand completely about Type and TypeToken

Can anyone please share a link or help understand these two concepts?

Answer

azizbekian picture azizbekian · Mar 30, 2017

From the link you provided:

Forces clients to create a subclass of this class which enables retrieval the type information even at runtime.

Let's speak with example.

Assume you want to parse a JSON to Java class with Gson library. Now, you have to specifically tell Gson, that:

I want this JSON to be translated to a List of User objects

How would you tell that to Gson? If it was only User, you could tell User.class. But it isn't possible to say List<User>.class

new Gson().fromJson(json, new TypeToken<List<User>>(){}.getType())

But now you can specify precisely that Gson should convert it to a List of Users.

Should quote explanation from docs:

Represents a generic type T. Java doesn't yet provide a way to represent generic types, so this class does.

Have a look at this blog post for more details on the topic.