introduction
Le titre de l'article est vraiment «holivny», mais à mon avis, Java et la bibliothèque populaire de Guava ont un certain nombre de problèmes architecturaux qui à long terme conduisent à des ambiguïtés et à des désaccords au sein de l'équipe.

Java Collections Framework et immuabilité sur la confiance
Collections Framework , . java.util.Collection
add
, clear
, remove
... : Collections.emptyList()
, Collections.singletonList<T>(T t)
, Arrays.asList<T>(T.. values)
. . :
List<Integer> list = Arrays.asList(21, 22, 23);
list.add(24)
? java.util.List
java.util.Collection
, add
. , Arrays.asList<T>(T... t)
, add
remove
. : , . , - .
List<Integer> list = Arrays.asList(21, 22, 23);
list.set(0, 121);
System.out.println(list);
. . , . , , , . .
List<Integer> filtered = filter(List<Integer> list);
filter
List<Integer>
. ? , ? try {} catch(Exception e) {}
add
remove
— . ? ? list
, filtered
? . , . , — . , , list.clear()
, , . SOLID, L — , , . , add
, .
- , Stream API
. , Java , , , . , , .
, java.util.Collection
, java.util.Iterable
, Collection
. Iterable
, Iterator
, for-each . .
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
remove
. , for-each, , , API , , . - , , , , Java , .
Guava
Guava? — ImmutableList
.
ImmutableList<String> people = ImmutableList.of("Michael", "Simon", "John")
...
? «Immutable». , ImmutableList
java.util.List
, add
, clear
... , . , final
. : , List
Collection
. , ImmutableList
, , , « ». Guava .
Kotlin
? , JetBrains Kotlin. , , , . :

, , , .
val list: List<Int> = listOf(1, 2, 3)
val mutableList: MutableList<Int> = list as MutableList<Int>
mutableList.clear()
- , MutableList
List
MutableList
, , . , Java Collections Framework, Guava: , . , , . , Java, - , , , .
? ? , : , , , . . Java Collections Framework Immutable. :

, , «Immutable». , . , ImmutableQueue
, , . . LinkedList
, , ( , ). ImmutableLinkedList
.
- , , . List
ImmutableList
. , toMutableList
toImmutableList
ImmutableList
List
. , , . , ArrayList
ImmutableArrayList
. . ArrayList
, ImmutableArrayList
, ImmutableArrayList
ArrayList
. API , .
, — java.util.Iterable
. , for-each , . java.util.Iterator
, , remove
, . , .
ImmutableIterable
, ImmutableIterator
. , , Java for-each Iterable
, ImmutableIterable
.ImmutableIterator
, java.util.Iterator
remove
, final
, . , .remove
Iterator
, , Java, , .
, Java JP . , — , Java-. , , . !
P.S.
Je travaille actuellement sur une bibliothèque open source qui fournit des collections Java entièrement immuables. Les personnes intéressées peuvent trouver le lien sur Github .