Я программирую игру на Java, и в качестве подсказки для названия вопроса я использую открытые поля в своих классах. (пока)
Из того, что я видел, публичные поля плохие, и я понимаю, почему. (но если кто-то может уточнить, почему вы не должны их использовать, это будет оценено)
Дело в том, что из того, что я видел (и это кажется логичным), является то, что использование приватных полей, но использование методов получения и установки для их получения также не очень хорошо, так как это побеждает смысл использования закрытых полей в первом место.
Итак, мой вопрос: каковы альтернативы? или мне действительно нужно использовать приватные поля с геттерами и сеттерами?
Для справки приведу один из моих классов и некоторые его методы.
Я уточню больше, если потребуется.
public double health;
//The player's fields.
public String name;
public double goldCount;
public double maxWeight;
public double currentWeight;
public double maxBackPckSlts;
public double usedBackPckSlts; // The current back pack slots in use
public double maxHealth; // Maximum amount of health
public ArrayList<String> backPack = new ArrayList<String>();
//This method happens when ever the player dynamically takes damage(i.e. when it is not scripted for the player to take damage.
//Parameters will be added to make it dynamic so the player can take any spread of damage.
public void beDamaged(double damage)
{
this.health -= damage;
if (this.health < 0)
{
this.health = 0;
}
}
РЕДАКТИРОВАТЬ: Для проверки вот как выглядит мой класс Weapon
: (Пример кода по какой-то причине не работает, поэтому он выглядит неправильно.)
private final double DAMAGE;
private final double SPEED;
public Weapon(double initialDmg,double initialSpd,String startName,double initialWg)
{
DAMAGE = initialDmg;
SPEED = initialSpd;
setItemName(startName);
setItemWeight(initialWg);
}
public double getSpeed()
{
return SPEED;
}
public double getDamage()
{
return DAMAGE;
}
Как видите, поскольку Weapon's
DAMAGE
и SPEED
не нужно менять, они могут быть окончательными на данный момент. (если позже в игре я решил, что эти значения можно «обновить», я могу добавить сеттеры затем с проверкой или просто создать новое оружие с улучшенными значениями) Они устанавливаются в конструкторе Weapon's
.
Вывод: геттеры и сеттеры в порядке, если они используются грамотно и используются только при необходимости. (Однако)