несколько типов списков массивов одним методом - PullRequest
0 голосов
/ 19 ноября 2018

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

код

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 голосов
/ 19 ноября 2018

Измените функцию на

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);
0 голосов
/ 19 ноября 2018

Вы можете сделать это с помощью Generics Java .

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 для типа.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...