Во-первых, я не задаю вопрос об оболочке, которая делает упаковку доступной только для чтения, такой как Collections.unmodifableXXX.У моего API был бы другой API, где все методы модификаторов возвращали бы новую коллекцию.
Что-то вроде простого списка больше не имело бы методов void set, но возвращало бы новый List.Пакет будет включать в себя те же неизменные варианты List, Set, Map и даже скучный стек.
UPDATE
// i am omitting generics etc to keep things simple.
XList list = List.fromArray( 1, 2, 3 );
XList list2 = list.add( 4 );
System.out.println( list ); // 1, 2, 3
System.out.println( list2 ); // 1, 2, 3, 4
удаляет, устанавливает и т.д.*