Оператор преобразования TreeMap и SortedMap

Что не так с этим утверждением?

private final HashMap<String, SortedMap<Long, Long>> abc;
abc = new HashMap<String, TreeMap<Long, Long>>;

Это показывает, что ошибка SortedMap не может быть преобразован в TreeMap как это? Как я могу сделать это возможным?

2 ответа

Если вы действительно хотите иметь возможность назначить его таким образом, то можете ли вы использовать подстановочный знак с привязкой ? extends SortedMap, например:

private final Map<String, ? extends SortedMap<Long, Long>> abc;
...
abc = new HashMap<String, TreeMap<Long, Long>>();

Тем не менее, вам не нужно указывать тип вложенной карты при создании нового внешнего экземпляра hashmap. Просто сохраните его как SortedMap, Позже, когда вы вставите значение, оно может быть новым TreeMap случаи, потому что они реализуют SortedMap, например

private final Map<String, SortedMap<Long, Long>> abc;
...
abc = new HashMap<String, SortedMap<Long, Long>>();
abc.put("Test", new TreeMap<Long, Long>());

После сокращения этого кода для вывода типа строки назначения могут выглядеть следующим образом:

abc = new HashMap<>();
abc.put("Test", new TreeMap<>());

Вы не инициализировали свой HashMap, Не забывайте использовать конструктор, когда создаете новый объект.

import java.util.*;
public class MyClass {
    public static void main(String args[]) {
        HashMap<String,SortedMap<Long,Long>> abc;
        abc = new HashMap<>();
    }
}
Другие вопросы по тегам