【问题标题】:multiple types of array list via one method通过一种方法获得多种类型的数组列表
【发布时间】:2018-11-19 08:51:27
【问题描述】:

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

代码

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

我尝试了很多但没有用

【问题讨论】:

  • 你当前的代码有什么问题
  • 产生错误是因为 List 不能直接转换成 List 或 List。您需要手动输入 cast 。为此,您需要将类型信息传递给 loadarraylist 函数
  • @NIKHILMAURYA 但我知道如果我放置对象,那么我可以发送任何列表类型(未知)
  • 我不想为每个列表创建多个方法,我希望为所有列表创建一个方法

标签: android android-studio arraylist


【解决方案1】:

您可以使用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");

说明

  • 方法中的第一个&lt;T&gt; 定义一个泛型类型T
  • 带有返回类型的第二个 T 定义了返回值的类型。
  • 您可以对变量 T 使用任何名称,例如 K、ListType。通常开发人员使用 T 表示类型。

【讨论】:

  • List是什么意思,为什么在list之前和之后?
【解决方案2】:

把函数改成

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

这样称呼

Posts = LoadArrayList("PostsList", PostsModel.class);

【讨论】:

  • List是什么意思,为什么在list之前和之后?
猜你喜欢
  • 2023-04-07
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2015-03-01
  • 2011-05-19
  • 2019-02-02
相关资源
最近更新 更多