Не могу понять почему не работает Array List: class java.util.Arrays$ArrayList cannot be cast to class java.util.ArrayList

Выдает ошибку

 Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayList cannot be cast to class java.util.ArrayList (java.util.Arrays$ArrayList and java.util.ArrayList are in module java.base of loader 'bootstrap')
    at List1.list(Okruzhnost.java:29)
    at Okruzhnost.main(Okruzhnost.java:22)

не понимаю, как это исправить. подскажите пожалуйста, что я делаю не так

public class Okruzhnost{
  
  public static void main(String[] args) {
      int x1 = 5,y1 = 6,x2 =7, y2=10; 
       int dx=5; int dy=5;
      
      Okruzhnost1 tom = new Okruzhnost1(); 
      
      tom.print1();
      tom.line();
      tom.dx();
      tom.line();
      tom.move(dx, dy);
       tom.print();
          
       List1 List = new List1();
       List.list();
  }
}
class List1{
  void list() {
  ArrayList<String> list;

  list = (ArrayList<String>) Arrays.asList(new String[] {"a", "b" ,"c"});
  System.out.println("Размер массива равен"  + 
  Integer.valueOf(list.size())+ "элементами");
  }
}
......
class Okruzhnost1{
...}

Ответы (1 шт):

Автор решения: gil9red

Причина в том, что:

Arrays.asList() вернет объект класса ArrayList который является внутренним приватным статическим классом (private static class) класса Arrays, а это не класс java.util.ArrayList. Класс java.util.Arrays.ArrayList содержит методы set(), get(), contains(), но не содержит никаких методов для добавления элементов, его размер фиксирован.

Можно не конвертировать тип и работать через List:

class List1{
    void list() {
      List<String> list = Arrays.asList(new String[] {"a", "b" ,"c"});
      System.out.println("Размер массива равен " + list.size() + " элементами");
    }
}

Но если нужен ArrayList<String>:

class List1{
    void list() {
      ArrayList<String> list = new ArrayList<String>(Arrays.asList(new String[] {"a", "b" ,"c"}));
      System.out.println("Размер массива равен " + list.size() + " элементами");
    }
}

PS.

В Arrays.asList можно вместо массива передавать параметрами:

Arrays.asList("a", "b" ,"c")
→ Ссылка