通过一种方法可以使用多种类型的数组列表

时间:2018-11-19 08:51:28

标签: android android-studio arraylist

如何通过一种方法传递多种类型的数组列表

代码

List<PostsModel> Posts = new ArrayList<>();
List<FavoriteModel> Favorite = new ArrayList<>();
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_posts);
        Posts = LoadArrayList("PostsList"); //Error here
        Favorite = LoadArrayList("FavoriteList"); //Error here
    }

public List<Object> LoadArrayList(String key) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    Gson gson = new Gson();
    String json = prefs.getString(key, null);
    Type type = new TypeToken<List<Object>>() {
    }.getType();
    return gson.fromJson(json, type);
}

我已经尝试了很多但是没用

2 个答案:

答案 0 :(得分:2)

您可以使用Java Generics来做到这一点。

public <T> List<T> loadArrayList(String key) {
    //...
    Type type = new TypeToken<List<T>>() {
    }.getType();
    return gson.fromJson(json, type);
}

现在您可以做到

List<PostsModel> Posts = loadArrayList("PostsList");

说明

  • 方法中的第一个<T>定义通用类型T
  • 具有返回类型的第二个T定义返回值的类型。
  • 您可以对变量T使用任何名称,例如K,ListType。通常,开发人员使用T作为类型。

答案 1 :(得分:1)

将功能更改为

 svg.selectAll(".rect")
    .data(NestbyDate)
    .enter()
    .append("rect")
    .attr("class", "rect")
    .attr("x", function(d) {
        return x(d.key);
    })
    .attr("y", function(d) {
        return y(d.values.length);
    })
    .attr("width", x.bandwidth())
    .attr("height", function(d) {
        return y(0) - y(d.values.length);
    });
});

喜欢这样

public <T> List<T> LoadArrayList(String key, Class<T> type) {
    SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(context);
    Gson gson = new Gson();
    return gson.fromJson(json, type);
}