Сегодня я пробовал использовать NavigableMap<K, V>
, где K
также является картой NavigableMap<K, V>
. И реализовал NavigableMap<K, V>
с использованием TreeMap<K, V>
. Что ж, для теста я решил добавить пару элементов в основную карту дескрипторов. И эти элементы для ручки K
- это вложенные NavigableMap<K, V>
для K
и V
простые Integer
, а для ручки V
это просто String
.
Для быстрого понимания что я имею в виду, лучше всего посмотреть на код:
NavigableMap<NavigableMap<Integer, Integer>, String> handle =
new TreeMap<NavigableMap<Integer,Integer>, String>();
NavigableMap<Integer, Integer> subMap = new TreeMap<Integer, Integer>();
subMap.put(43787483, 0);
subMap.put(785845574, 1);
NavigableMap<Integer, Integer> subMap2 = new TreeMap<Integer, Integer>();
subMap2.put(78473374, 0);
subMap2.put(478374879, 1);
handle.put(subMap, "SubMap 1");
handle.put(subMap2, "SubMap 2");
Но, к сожалению, код, который должен нормально работать, вылетает с ошибкой
java.lang.ClassCastException: class java.util.TreeMap cannot be cast to class java.lang.Comparable (java.util.TreeMap and java.lang.Comparable are in module java.base of loader 'bootstrap')
в строке
handle.put(subMap, "SubMap 1");
Я конечно понимаю, что тут что-то связанное с Comparator<K>
, но тот же тест с простым NavigateMap<K, V>
работает нормально и без исключений. Это тот же пример:
NavigableMap<Integer, String> handle = new TreeMap<Integer, String>();
handle.put(0, "SubMap 1");
handle.put(1, "SubMap 2");
Есть ли у вас какие-либо решения или предложения?