2015-01-21 2 views
0

Когда я открываю исходный код из TreeSet класса есть следующий код:реализации TreeSet в Java от того, содержит (Исходник) отсутствует

public boolean contains(Object o) { 
    return m.containsKey(o); 
} 

м является NavigableMap, который является интерфейсом. Итак, где же реализация? Это определенно не в TreeSet.

+2

Вы узнали, что такое '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – rgettman

+0

Хорошо, теперь я чувствую себя немой. m - NavigableMap, но он создается как TreeMap и там я нашел реализацию. Должен ли я удалить этот вопрос? –

ответ

1

От источника для TreeSet:

TreeSet(NavigableMap<E,Object> m) { 
    this.m = m; 
} 

public TreeSet() { 
    this(new TreeMap<E,Object>()); 
} 

Так m должен быть TreeMap (или, возможно, другой реализации NavigableMap, если другой класс в том же пакете, что вызывает конструктор).

+0

Конструктор 'TreeSet (NavigableMap m)' только для пакетов, поэтому он не может быть просто «NavigableMap» - возможно построить «TreeSet» с помощью «TreeMap» или «TreeSet» 'из подмарок' TreeMap' –

+0

Хорошая точка. Исправлена. – Todd

+0

Да, вы правы. Я пропустил, что NavigableMap m действительно может быть суперинтерфейсом класса, реализующего его ... В eclipse я нажал на m, а затем «Открыть объявление», но затем появился интерфейс NavigableMap ... Я не знаю, почему я не сделал этого, Я тоже думаю об этом. Я должен лечь спать –

Смежные вопросы