Показать полную графическую версию : Локальные переменные?
Часто в чужом коде вижу такие конструкции.
public class A {
private FieldType field;
...
public FieldType method() {
FieldType result = field;
...
return result;
}
}
Зачем так делать? Это как-то оптимизирует код?
Вполне возможно, что в "...." метода method() что-то происходит с переменной field, но изменять её для всего объекта нежелательно. Поэтому её копируют в result, портят и возвращают куда надо.
Coutty, так в этом и дело, что её не копируют - это же ссылочный тип.
вот например из исходников libgdx
public class Group extends Actor implements Cullable {
static private final Vector2 tmp = new Vector2();
.....................
public Actor hit (float x, float y, boolean touchable) {
if (touchable && getTouchable() == Touchable.disabled) return null;
Vector2 point = tmp;
Actor[] childrenArray = children.items;
for (int i = children.size - 1; i >= 0; i--) {
Actor child = childrenArray[i];
if (!child.isVisible()) continue;
child.parentToLocalCoordinates(point.set(x, y));
Actor hit = child.hit(point.x, point.y, touchable);
if (hit != null) return hit;
}
return super.hit(x, y, touchable);
}
}
там есть примеры и не для static полей. Вроде и для не final тоже.
Цитата GordonG:
Зачем так делать? Это как-то оптимизирует код? »
В данном случае прямой доступ к полю закрыт, и осуществляется только через предопределенные автором класса методы, что позволяет уменьшить вероятность возникновения ошибок как при разработке класса (и подклассов) так и при использовании экземпляров класса. Если вы забыли - это называется инкапсуляция, один из основополагающих принципов ООП.
Позволю себе привести цитату:
Единственный чрезвычайно важный фактор, отличающий хорошо спроектированный модуль от неудачного,- степень сокрытия его внутренних данных и иных деталей реализации от других модулей. Хорошо спроектированный модуль скрывает все детали реализации, четко разделяя свой АРI и реализацию. Модули взаимодействуют друг с другом только через свои API, и ни один из них не знает, какая обработка происходит внутри другого модуля. Эта концепция, называемая сокрытием информации (information hiding) или инкапсуляцией (encapsulatiori), представляет собой один из фундаментальных принципов разработки программного обеспечения...
Источник: Java Эффективное программирование. Джошуа Блох.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.