Как вернуть неизменяемое представление коллекции Java Trove?
Я хотел бы поместить неизменяемые обертки вокруг некоторых коллекций Trove: я проверил документацию Trove и, похоже, не могу найти простой способ сделать это (возможно, я упустил что-то очевидное).
Так что теперь каждый раз, когда мне нужна такая немодифицируемая оболочка, я расширяю коллекцию Trove (например, TIntLongHashMap) и делегирую все вызовы только для чтения для обернутого субъекта Trove и выбрасываю исключение UnsupportedOperationException в каждом методе, который пытается изменить коллекцию,
Есть ли более простой способ?
Примечание: этот вопрос не о коллекциях Java по умолчанию, и в этом случае меня совсем не интересуют ни коллекции Java по умолчанию, ни другие коллекции Java: этот вопрос конкретно касается Trove.
2 ответа
Это невозможно сделать с помощью Trove API, только с помощью декораторов.
Принятый ответ был верным в то время, но для тех, кто хочет сделать то же самое, Trove 3 теперь поддерживает это через TCollections
учебный класс.
Например
TIntLongMap myMap = new TIntLongHashMap();
TIntLongMap myUnmodifiableMap = TCollections.unmodifiableMap(myMap);
myUnmodifiableMap.put(1, 2L); // throws UnsupportedOperationException