Java абстрактный класс функции универсального типа - PullRequest
2 голосов
/ 09 декабря 2011

Я создал абстрактный класс для моих ArrayList держателей

public abstract class ArrayHolder {
    Gson g = new Gson();
}

, используемых как

public class MyHolder extends ArrayHolder {
    ArrayList<MyType> myList = new ArrayList<MyType>();
}

Я хотел бы создать абстрактную функцию для заполнения этой ArrayList из Stringи Type аргумент

вот так (String data - это JSON в String): Эта функция должна быть переписана

public ArrayList<T> arrayType(String data, T type){
    return g.fromJson(data, new TypeToken<ArrayList<type>(){}.getType());
}

, чтобы использовать ее в подклассе

public void fillData(String data){
    myList = arrayType(data, MyType.class);
}

Как я могу сделать это правильно?

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011

Попробуйте это ...

public abstract class ArrayHolder {
    Gson g = new Gson();

    public <T> ArrayList<T> arrayType(String data){
        return g.fromJson(data, TypeToken.get(new ArrayList<T>().getClass()));
    }
}

используйте

public class MyCollection extends ArrayHolder {
    private ArrayList<MyType> collection;

    public void setData(String data){
        collection = arrayType(data);
    }
}
2 голосов
/ 09 декабря 2011

Сделайте так:

public <T> ArrayList<T> arrayType(String data){
     return g.fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
}

Я не имел дело с универсальными типизированными методами, но из того, что я видел, это правильно.

2 голосов
/ 09 декабря 2011
public <T> ArrayList<T> arrayType(String data){
    return g.fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
}
...