0 голосов
 
2557 просмотров
29.09.2016 / 15:03  Death

Гетеры и сетеры в Java

Вот обезательно ли в Java геторы и сеторы?
Вот у меня есть класс игрок. У него много полей, от координат расположения, и до цвета его. Вего наберётся десятки переменных, и это только у игрока.

Для каждого создовать по два метода. Я конечно понимаю, что с IDE, в частности NB, там есть реорганизация кода. Но это каждый раз вызывать, как добовляешь поле для класса(по ходу разработки игры).

Я даже начал делать классы, с переменным, и к ним "привязанным" методы, и этот класс наследует дочерний класс игрока.

Так вот. Принято ли это безательным что бы эти переменые изменять и возращать через методы? Просто это мне не нужно, и не удобно. Но хочется придерживаться стандарта "оформления" и реорганизации кода.
Изм. Koenig от 30.09.2016 / 00:06
30.09.2016 / 00:10  Koenig
Гетеры и сетеры же
30.09.2016 / 07:08  Death
Всё понятно. Я понял. Всем спасибо!
Ответы
 
3 голоса
 
# 29.09.2016 / 15:13  Ginosaji
Я где-то прочитал замечательный ответ на этот вопрос: "Это всё равно что пихать еду прямо в желудок, разрезав живот и минуя рот".

Можно и без них, раз так хочется, компилятор не обидится всё равно. Только такой код лучше не открывать никому, заклюютЬ.
29.09.2016 / 17:59  Death
Ну просто у меня такие паременные, которые проверяются в обновлении.
 
2 голоса
 
# 29.09.2016 / 17:07  Arigato
Конечно, можно сделать поля публичными (public), вон в Unity половина классов такие.
Но тут есть несколько проблем:
Во-первых, может внезапно возникнуть необходимость контролировать значение поля. Например, количество HP не может быть меньше нуля,
Во-вторых, между полями могут возникнуть зависимости. Например, если у игрока HP меньше половины, то на него накладывается какой-нибудь эффект,
В-третьих, с помощью геттеров/сеттеров и интерфейсов можно достигнуть гибкого полиморфизма на основе интерфейсов:
  1. public interface HasHP {
  2.   int getHP();
  3.   int setHP(int hp);
  4. }
  5. public class Player implements HasHP { ... }
  6. public class Monster implements HasHP { ... }
Юзкейс: есть некоторое событие, воздействующее на всех существ на локации (постепенно наносит урон), тогда код будет каким-то таким:
  1. public class DamageEffect {
  2.   private List<HasHP> targets;
  3.   ...
  4.   public executeEffect() {
  5.     for (HasHP t : targets) { t.setHP(t.getHP() - 1); }
  6.   }
Изм. Arigato от 29.09.2016 / 17:07
29.09.2016 / 17:52  Death
Вот то проверку hp я делаю в "обновлении" класса
29.09.2016 / 22:07  vlavolk
Вова, слушай aRiGaTo, он прав. Юзай гетеры и сетеры только тогда, когда нужно контролировать значение поля. И лучше будет сделать изменение НР в классе игрока отдельными методами с контролированием значений.
 
1 голос
 
# 29.09.2016 / 19:25  Naik
В случае с Android и JavaME лучше по возможности без геторов и сеторов, особенно гетор бесполезный для финельной пиременой
 
1 голос
 
# 29.09.2016 / 15:07  vlavolk
Делай как удобно, я вот в последнем проекте использую прямой доступ к переменным из-за большого количества переменных.
 
0 голосов
 
# 30.09.2016 / 00:07  Koenig
если свойства заполняются при инициализации, запили их в конструктор
 
0 голосов
 
# 29.09.2016 / 19:06  DominaN
Юнька не показатель. Лучше перестраховаться. Но это если делаешь серьезный проект. Если так, хочешь набросать игрушку за неделю, то делай как хочешь, принципиальной разницы не будет, а время на разработку сократится
Всего: 6

Реклама

Мы в соцсетях

tw tg yt gt