Почему entryset в HashMap вызывает entryset0?

Почему entryset в HashMap вызывает entryset0 вместо прямой записи

Set <Map.Entry <K, V >> es = entrySet; 
! return es = null es: (entrySet = new EntrySet ());

В методе writeObject напрямую вызывается entrySet0, по той причине, что метод entrySet может быть переопределен?

1 ответ

Решение

Ваше объяснение наиболее правдоподобно. Это сделано для того, чтобы изолировать реализацию HashMap от последствий переопределения кем-либо entrySet() метод в подтипе.

Единственное другое объяснение, которое я могу придумать, состоит в том, что это осталось от какой-то более старой версии класса, и я не ожидал бы, что разработчики Java позволят этому случиться здесь. (Это код имеет много глазных яблок...)

В любом случае, это, вероятно, не имеет значения для производительности. Компилятор JIT, скорее всего, встроит вызов... за исключением случая, когда есть подкласс HashMap это отменяет entrySet(),

Другие вопросы по тегам