Как преобразовать тип объекта в тип List <Object>? - PullRequest
0 голосов
/ 02 июня 2018
List<Object> frames = new ArrayList();
List<String> names = new ArrayList();

frames.add(names);

//compiler error
frames.get(0).add("ABCD");

Поскольку .get() возвращает тип объекта, а тип объекта не имеет .add() метода, компилятор вызывает ошибку.Как я могу привести тип объекта в список типа?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

У вас есть 2 варианта:

  • Измените frames на List<List<String>>, если список frames всегда будет содержать список строк.Это безопасно, но ограничено типом.

    List<List<String>> frames = new ArrayList<List<String>>();
    
  • Используйте приведение типа при получении.Этот не является безопасным, и я рекомендую вам избегать кастинга, когда это возможно.Здесь будет иметь место проверка, действительно ли полученный элемент из списка frames является самим списком:

    Object first = frames.get(0);
    if (first instanceof List) {
        ((List<String>) first).add("ABCD");
    }
    

Более того, старайтесь избегать raw-типов.В этом случае используйте операторы <> diamond при объявлении:

List<Object> frames = new ArrayList<>();
List<String> names = new ArrayList<>();
0 голосов
/ 02 июня 2018

Вы можете изменить универсальные переменные frames с Object на List<String>.Таким образом, компилятор может видеть типы, которые находятся в списках, что позволяет использовать метод get(...).

List<List<String>> frames = new ArrayList<List<String>>();
List<String> names = new ArrayList<String>();

frames.add(names);

frames.get(0).add("ABCD");
...