Мне было интересно, оптимизирует ли компилятор (ECJ, javac или вы можете назвать ваш любимый компилятор) анонимные классы, которые не добавляют или не переопределяют методы своего базового класса.
Например, для кода, который выглядит следующим образом:
Фрагмент A:
Human h = new Human("John", 30);
h.setX(12.5);
h.setY(15.3);
//..
Eat(h);
Я бы всегда предпочел синтаксис:
Фрагмент B:
Eat(new Human("John", 30){
{
setX(12.5);
setY(15.3);
//..
}
});
Однако я понимаю, что в отличие от ключевого слова WITH
, которое есть в vb.net, это не просто синтаксический сахар. То, что мы говорим компилятору, это создание анонимного подкласса Human, конструктор которого состоит из кода внутри фигурных скобок (и поэтому мы не можем использовать этот синтаксис-сахар для конечных классов).
Проблема в том, что я использую этот синтаксис-сахар все время (как, например, переопределение onclick в слушателях пользовательского интерфейса и т. Д.), Это как один из моих стилей / привычек кодирования.
Отсюда вопрос:
Оптимизирует ли компилятор этот вид синтаксиса? (то есть он понял, что не нужно создавать анонимные классы, и производительность Snippet B будет такой же, как Snippet A )
Если ответом на (1) является «нет», мне было бы интересно узнать, является ли это (изобилие анонимных классов больше, чем ожидалось из-за этого стиля кодирования) заметным Настоятельно рекомендуется, чтобы в будущих проектах (приложениях для среднего мобильного устройства) мы всегда придерживались стиля в Snippet A ?