Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 0

Załóżmy, że mamy następujący problem. Chcemy przekształcić tablicę tekstową na listę.

Można do tego celu wykorzystać klasę java.util.Arrays. Jeśli napiszemy następujący kod:

String[] array = {"a", "b", "c"};
List<String> view = Arrays.asList(array);
System.out.println(view);   // [a, b, c]

... to tylko z pozoru osiągniemy sukces.

Co prawda, program poprawnie wypisze wszystkie elementy, ale już próba dodania do "kolekcji" kolejnego elementu zakończy się wyrzuceniem wyjątku java.lang.UnsupportedOperationException

Jest to spowodowane tym, że nie utworzyliśmy nowej kolekcji, lecz tylko tzw. widok. W stosunku do widoków można stosować API kolekcji, ale "pod spodem" nadal jest tablica.

Tak więc próba dodania kolejnego elementu do całkowicie zapełnionej tablicy musiała zakończyć się niepowodzeniem (nie można zmienić rozmiaru raz utworzonej tablicy).

Aby więc otrzymać "prawdziwą" kolekcję, trzeba utworzyć ją wywołując konstruktor i inicjując ją wartościami z widoku. Pełny, poprawny kod przedstawiony jest poniżej:

String[] array = {"a","b","c"};
List<String> view = Arrays.asList(array);
System.out.println(view);   // [a, b, c]

// to zakończy się wyjątkiem:
// view.add("d");

List<String> list = new ArrayList<String>(view);
list.add("d");
System.out.println(list);   // [a, b, c, d]


  • Odpowiedział
  • @ | 25.06.2013
  • TRENER MODERATOR ALTKOM AKADEMII