java - 公共(public)领域的替代品有哪些?

标签 java c++ class field public

我正在用 Java 编写游戏,作为问题标题的建议,我在我的类(class)中使用公共(public)字段。 (暂时)

据我所见,公共(public)领域很糟糕,我对原因有所了解。 (但如果有人能澄清为什么你不应该使用它们,那将不胜感激)

问题是,从我所见,(这似乎合乎逻辑)是使用私有(private)字段,但使用 getter 和 setter 访问它们也不好,因为它破坏了首先使用私有(private)字段的意义地点。

那么,我的问题是,有哪些替代方案?还是我真的必须使用带有 getter 和 setter 的私有(private)字段?

这里是我的一个类和它的一些方法供引用。

如果需要,我会详细说明。

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的 DAMAGESPEED不需要更改,暂时可以是final的. (如果在游戏后期,我决定这些值可以“升级”,可以这么说,我可能会添加 setter ,然后进行验证,或者只是用升级后的值制作新武器)它们在 Weapon's 中设置 构造函数。

结论:getter 和 setter 都可以,只要巧妙地使用它们,并且只在需要时使用。 (但是)

最佳答案

通常使用 getter 和 setter,而不是授予其他对象直接更改字段的权限。当您看到 99.99% 的 getter 和 setter 不做任何事情时,这可能没有任何意义,除非您可以直接访问字段。但是当你决定当一个玩家受到伤害超过一个点时,他会丢失一半的库存,会发生什么呢?或者你想限制魔法元素可以使用多少背包槽?您要么必须查找代码中修改字段的所有位置,要么,如果您使用 getter 和 setter,则完全在类中进行更改。这就是面向对象编程的核心——您已经将对象的“知识”封装在对象本身内,而不是将其分散到与该对象交互的所有对象中。

关于java - 公共(public)领域的替代品有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574479/

相关文章:

c++ - 没有匹配的函数来调用 [class]

java - 更改 JButton 中图像的填充/插入

java - 如何使用jsp返回AJAX响应?

java - RESTful 服务 - GET 和 POST 请求不起作用

c++ - 查找预编译头使用时跳过头文件

css - hr类双边框

java - php 与 java 中的嵌套三元运算符关联性

c++ - C++ 项目中的 .pro 扩展名

c++ - 用托管类包装 C++ DLL

Java:Android类和api包层次继承