Java abstract class function generic Type

陌路散爱 提交于 2019-12-11 02:23:38

问题


I created abstract class for my ArrayList holders

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

used like

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

I would like to create abstract function to fill this ArrayList from String and Type argument

like this (String data is JSON in String) : This function should be rewritten

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

to use it in subclass

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

How can I do this properly?

Thanks


回答1:


Try this...

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()));
    }
}

use

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

    public void setData(String data){
        collection = arrayType(data);
    }
}



回答2:


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



回答3:


Do it like this:

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

I haven't dealt with generic typed methods, but from what I've seen, this is right.



来源:https://stackoverflow.com/questions/8437121/java-abstract-class-function-generic-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!