java.util.Collections
в настоящее время обеспечивает следующие вспомогательные методы для создания synchronized
обертки для различных интерфейсов коллекции:Дать синхронизировано поточно-безопасность оболочку для NavigableMap
synchronizedCollection(Collection<T> c)
synchronizedList(List<T> list)
synchronizedMap(Map<K,V> m)
synchronizedSet(Set<T> s)
synchronizedSortedMap(SortedMap<K,V> m)
synchronizedSortedSet(SortedSet<T> s)
Аналогично, он также имеет 6 unmodifiedXXX
перегрузок.
Впечатляющее упущение здесь - утилиты для NavigableMap<K,V>
. Это правда, что это extends SortedMap
, но так же SortedSet extends Set
и Set extends Collection
, и Collections
имеют специальные методы утилиты для SortedSet
и Set
. Предположительно, NavigableMap
- полезная абстракция, иначе она не была бы там в первую очередь, и все же для нее нет полезных методов.
Так вопросы:
- Есть ли конкретная причина, почему
Collections
не предоставляет вспомогательные методы дляNavigableMap
? - Как вы писали свой собственный
synchronized
обертка дляNavigableMap
?- Взглянув на source code for OpenJDK version of
Collections.java
, кажется, предполагает, что это просто «механический» процесс- Верно ли, что в целом вы можете добавить
synchronized
поточно-safetiness особенность, как это? - Если это такой механический процесс, можно ли его автоматизировать? (Плагин Eclipse и т. Д.)
- Требуется ли повторение этого кода или его можно избежать с помощью другого шаблона проектирования ООП?
- Верно ли, что в целом вы можете добавить
- Взглянув на source code for OpenJDK version of
Woot! Как авторитетно, так как это происходит от «почему?». Я не могу принять этот ответ прямо сейчас, так как отсутствует «как?». Не могли бы вы прокомментировать это? Это все еще большая часть моего вопроса. Насколько сложно писать и проверять эти «методы ошеломляющего перенаправления»? Не может быть полуавтоматизировано? И т. Д. – polygenelubricants
Я бы просто скопировал 'static class SynchronizedMap' и' static class SynchronizedSortedMap' из источника 'Collections', добавил вашу собственную' SynchronizedNavigableMap', которая 'extends SynchronizedSortedMap' и украсит отсутствующие методы так же, как два скопированных класса делает. Это будет много кода, и уже поздно :) – BalusC
это такой механический и «умопомрачительный» процесс! Казалось бы, это должно быть автоматизировано! – polygenelubricants