Почему 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()
,