المقدمة
عنوان المنشور هو حقا "holivny" ، لكن في رأيي كل من جافا ومكتبة الجوافة الشعبية لديها عدد من المشاكل المعمارية التي تؤدي على المدى الطويل إلى الغموض والخلافات في الفريق.

إطار مجموعات جافا والثبات على الثقة
في البداية ، تم تطوير إطار المجموعات دون اعتبار لحقيقة أن الحاويات الثابتة قد تظهر هناك. واجهة 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.
أعمل حاليًا على مكتبة مفتوحة المصدر توفر مجموعات جافا ثابتة تمامًا. يمكن للمهتمين العثور على الرابط في Github .