Сформуйте концепцію спадкування, якщо якийсь пертикулярний метод недоступний у поточному класі, він шукатиме цей метод у суперкласах. При наявності він виконує.
Він виконує метод AbstractList<E>
класу, add()
який кидає UnsupportedOperationException
.
При перетворенні з масиву в колекцію Obejct. тобто на основі масиву до API на основі колекції, тоді він надасть вам об'єкт колекції фіксованого розміру, оскільки поведінка Array має фіксований розмір.
java.util.Arrays.asList (T ... a)
Зразки соуса для конформації.
public class Arrays {
public static <T> List<T> asList(T... a) {
return new java.util.Arrays.ArrayList.ArrayList<>(a); // Arrays Inner Class ArrayList
}
//...
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
//...
}
}
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
//...
}
public ListIterator<E> listIterator() {
return listIterator(0);
}
private class ListItr extends Itr implements ListIterator<E> {
//...
}
}
Сформувавши вищевказане джерело, ви можете спостерігати, що java.util.Arrays.ArrayList
клас не відповідає @Override add(index, element), set(index, element), remove(index)
. Отже, з успадкування він виконує функцію супер AbstractList<E>
класу, add()
яка кидає UnsupportedOperationException
.
Оскільки AbstractList<E>
це абстрактний клас, він забезпечує його реалізацію iterator() and listIterator()
. Отже, ми можемо перебрати об’єкт списку.
List<String> list_of_Arrays = Arrays.asList(new String[] { "a", "b" ,"c"});
try {
list_of_Arrays.add("Yashwanth.M");
} catch(java.lang.UnsupportedOperationException e) {
System.out.println("List Interface executes AbstractList add() fucntion which throws UnsupportedOperationException.");
}
System.out.println("Arrays → List : " + list_of_Arrays);
Iterator<String> iterator = list_of_Arrays.iterator();
while (iterator.hasNext()) System.out.println("Iteration : " + iterator.next() );
ListIterator<String> listIterator = list_of_Arrays.listIterator();
while (listIterator.hasNext()) System.out.println("Forward iteration : " + listIterator.next() );
while(listIterator.hasPrevious()) System.out.println("Backward iteration : " + listIterator.previous());
Ви навіть можете створити форму масиву масивів з фіксованим розміром Collections.unmodifiableList(list);
Зразок джерела:
public class Collections {
public static <T> List<T> unmodifiableList(List<? extends T> list) {
return (list instanceof RandomAccess ?
new UnmodifiableRandomAccessList<>(list) :
new UnmodifiableList<>(list));
}
}
А Collection
- іноді називається контейнером - це просто об'єкт, який групує кілька елементів в одну одиницю. Колекції використовуються для зберігання, пошуку, маніпулювання та передачі сукупних даних.
@дивитися також