То, что все остальные говорили об оптимизации, абсолютно верно.
Нет причин с точки зрения производительности , чтобы встроить метод. Если это проблема с производительностью, JIT в вашей JVM включит ее. В java вызовы методов настолько близки к свободным, что не стоит об этом думать.
Говоря, здесь есть другая проблема. А именно, является плохой практикой программирования для вызова переопределяемого метода (т. Е. Того, который не является final
, static
или private
) из конструктора. (Эффективная Java, 2-е изд., Стр. 89 в элементе под названием «Дизайн и документ для наследования или запрет»)
Что произойдет, если кто-то добавит подкласс BinarySearchTree
, названный LoggingBinarySearchTree
, который переопределяет все общедоступные методы с помощью кода типа:
public void clear(){
this.callLog.addCall("clear");
super.clear();
}
Тогда LoggingBinarySearchTree
никогда не будет конструктивным! Проблема в том, что this.callLog
будет null
, когда работает конструктор BinarySearchTree
, но clear
, который вызывается, является переопределенным, и вы получите NullPointerException
.
Обратите внимание, что Java и C ++ отличаются здесь: в C ++ конструктор суперкласса, который вызывает метод virtual
, заканчивает вызов того, что определено в суперклассе, а не переопределенном. Люди, переключающиеся между двумя языками, иногда забывают об этом.
Учитывая, что, по-моему, в вашем случае, возможно, более чистым является включение метода clear
при вызове из конструктора , но в общий на Java, вы должны идти вперед и делать все вызовы методов, которые вы хотите.