Suppose we have a JSON string:

["first","second","third"]

We can parse this JSON string into a String array :

Gson gson = new Gson();
String jsonArray = "[\\"first\\",\\"second\\",\\"third\\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);

But if we want parse it into a List<String> object, we must use TypeToken.

Here is the sample :

Gson gson = new Gson();
String jsonArray = "[\\"first\\",\\"second\\",\\"third\\"]";
List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());

Suppose we have two classes below:

public class Outer<T> {
    public int index;
    public T data;
}

public class Person {
    public String firstName;
    public String lastName;
}

and we have a JSON string that should be parsed to a Outer<Person> object.

This example shows how to parse this JSON string to the related generic class object:

String json = "......";
Type userType = new TypeToken<Outer<Person>>(){}.getType();
Result<User> userResult = gson.fromJson(json,userType);

If the JSON string should be parsed to a Outer<List<Person>> object :

Type userListType = new TypeToken<Outer<List<Person>>>(){}.getType();
Result<List<User>> userListResult = gson.fromJson(json,userListType);