2013-05-15 5 views
2

Я смотрю на исходный код для JDK 7 - в частности WeakHashMap.java, где есть широкое использование этого:Map.Entry следующий метод?

Entry<K,V> p = prev; 
Entry<K,V> next = p.next; 

но рядом не метод, определенный на Map.Entry (насколько Я вижу? http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html)

Куда зов к этому методу приходит с этого момента?

+0

О каком методе вы говорите? – Woot4Moo

+1

следующий, если следующая запись связана с текущей записью. Это не метод, это переменная –

+0

@ZouZou да, Im тоже слишком привык к scala и забыл разницу. – Michael

ответ

5

WeakHashMap не относится к Map.Entry, но вместо того, чтобы его собственный internal implementation интерфейса Map.Entry, класс с именем Entry. У этого класса есть поле с именем next, к которому он может получить доступ.

+0

Ах! Объясняет все, спасибо :) (вот что происходит, когда я не использую IDE>. <) – Michael

0

next не является функцией. Это переменная-член класса, к которому непосредственно обращаются. Как правило, вы увидите это (в ОО коде)

public class Foo 
{ 
    String bar; 

    public String getBar() 
    { 
     return this.bar; 
    } 
} 

.next синтаксис вы видите то, что обычно называют прямой доступ членов и, как правило, с неодобрением.

0

Это внутренний класс внутри WeakHashMap, который содержит ссылку на запись следующего:

private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V>{ 
    V value; 
    final int hash; 
    Entry<K,V> next; 

    Entry(Object key, V value, ReferenceQueue<Object> queue, int hash, Entry<K,V> next) { 
    super(key, queue); 
    this.value = value; 
    this.hash = hash; 
    this.next = next; 

    // omit others... 
} 

Заканчивать исходный код в строке 682: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/WeakHashMap.java#WeakHashMap.Entry

Это то же самое для HashMap. Он имеет аналогичный внутренний класс:

static class Entry<K, V> implements Map.Entry<K, V> 
Смежные вопросы