Я программирую игру в java, и в качестве заголовка вопроса я использую публичные поля в своих классах. (пока)
Из того, что я видел, публичные поля плохие, и я понимаю, почему. (но если кто-то может уточнить, почему вы не должны их использовать, это будет оценено)
Дело в том, что также из того, что я видел (и это кажется логичным), заключается в том, что использование частных полей, но использование геттеров и сеттеров для их доступа также не очень хорошо, поскольку оно наносит ущерб использованию личных полей в первом место.
Итак, мой вопрос в том, каковы альтернативы? или мне действительно нужно использовать частные поля с геттерами и сеттерами?
Для справки здесь приведен один из моих классов и некоторые его методы.
Я буду более подробно рассказывать, если это необходимо.
public double health;
//The player 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;
}
}
EDIT: для проверки этого класса мой класс 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
.
Заключение: геттеры и сеттеры в порядке, если они используются умно и используются только тогда, когда это необходимо. (Однако)