Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Локальные переменные?

Ответить
Настройки темы
Java - Локальные переменные?

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: GordonG
Дата: 25-01-2015
Часто в чужом коде вижу такие конструкции.

Код: Выделить весь код
public class A {

private FieldType field;
...

public FieldType method() {
FieldType result = field;
...
return result;
}

}
Зачем так делать? Это как-то оптимизирует код?

Отправлено: 14:50, 25-01-2015

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Вполне возможно, что в "...." метода method() что-то происходит с переменной field, но изменять её для всего объекта нежелательно. Поэтому её копируют в result, портят и возвращают куда надо.

Отправлено: 15:13, 25-01-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


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 тоже.

Отправлено: 15:26, 25-01-2015 | #3


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата GordonG:
Зачем так делать? Это как-то оптимизирует код? »
В данном случае прямой доступ к полю закрыт, и осуществляется только через предопределенные автором класса методы, что позволяет уменьшить вероятность возникновения ошибок как при разработке класса (и подклассов) так и при использовании экземпляров класса. Если вы забыли - это называется инкапсуляция, один из основополагающих принципов ООП.

Позволю себе привести цитату:
Сводите к минимуму доступность классов и членов

Единственный чрезвычайно важный фактор, отличающий хорошо спроектированный модуль от неудачного,- степень сокрытия его внутренних данных и иных деталей реализации от других модулей. Хорошо спроектированный модуль скрывает все детали реализации, четко разделяя свой АРI и реализацию. Модули взаимодействуют друг с другом только через свои API, и ни один из них не знает, какая обработка происходит внутри другого модуля. Эта концепция, называемая сокрытием информации (information hiding) или инкапсуляцией (encapsulatiori), представляет собой один из фундаментальных принципов разработки программного обеспечения...

Источник: Java Эффективное программирование. Джошуа Блох.

Отправлено: 15:33, 26-05-2015 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Локальные переменные?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Переменные RasKolbas Общий по Linux 8 23-07-2010 18:12
Разное - [PHP] Переменные CXREF Программирование и базы данных 2 16-06-2009 08:15
Переменные окружения Danwer Общий по FreeBSD 2 16-09-2007 14:47
Переменные в PHP Guest Программирование и базы данных 6 11-09-2003 04:28
Переменные в PHP Guest Вебмастеру 1 10-01-2003 13:48




 
Переход