我正在写一个游戏,我有一个输入类,其中包含所有不同键的布尔值。我在主游戏类中创建了这个类的实例。布尔是公开的,还是我应该使用访问者访问它们?
答案 0 :(得分:4)
如果您拥有boolean
,并且所有密钥都已初始化为private Map<String, Boolean> keyStates
,那么代替每个密钥false
,代码将更易读,更容易编码。然后您的访问者可能是:
public void setPressed(String keyName) {
keyStates.put(keyName, true);
}
public void setReleased(String keyName) {
keyStates.put(keyName, false);
}
public boolean isPressed(String keyName) {
return keyStates.get(keyName);
}
使用访问器方法而不是公共变量的一般原因是它允许类更改其实现,而无需更改与其成员交互的类。例如,通过上述内容,您现在可以添加代码来计算或记录按键,或者更改所使用的Map
的基础类型,而不会将任何内容暴露给外部。
这是不个人偏好。 Encapsulation和Interfaces是OO软件工程的组成部分,是技术POV可以实现互联网的主要设计原因。
答案 1 :(得分:3)
这是主要是个人品味的东西 - 我敢肯定,你会发现人们对双方争论的,我会说这是不是黑色或白色的,而是取决于类是如何“大头”
使用getter和setter的基本原理是,您将实际表示抽象为一个字段,以便您可以自由地开始将其表示为例如。派生值而不更改您的界面。所以真正归结为这个类的接口对你有多大价值。
如果它是您的一流公共界面的一部分,那么肯定使用getter和setter。在另一个极端,如果它是一个像元组一样的简单数据持有者,它只在一个类中使用(例如,在转换成另一个类之前映射数据库行),那么我会毫不犹豫地使用字段;界面没有实际价值,因为它只在内部使用。
那么有多少类/包可以使用这个类?如果它是一个私人的“本地”课程,那么我认为只使用这些字段并更新你的呼叫者是否有任何问题,如果这需要改变的话。
如果字段final
也是{{1}},则访问字段更容易证明,这种对象通常就是这种情况。
答案 2 :(得分:2)
一般来说,我建议使用getter和setter,因为它更干净,更有条理,更易读。如果您有很多不同的程序员在查看您的代码,这也会有所帮助。我的观点是始终将您的变量设为私有,除非您出于特定原因需要公开它们。如果性能确实是游戏中的一个问题,那么将变量公之于众将有助于减少函数调用。
答案 3 :(得分:1)
这不错,但通常你会想encapsulate一个物体的状态。
答案 4 :(得分:0)
标准做法是使用遵循java bean约定的getter / setter使成员变量成为受保护或私有的。这往往有些冗长,但有一个非常好的库(www.projectlombok.org)可以为你生成getters / setters / constructors / toString / hashCode / equals方法。
答案 5 :(得分:0)
将类变量声明为私有并使用公共getter和setter方法访问它们总是一个很好的java编程实践,除非确实需要将它们声明为public。
如果您使用的是IDE,那么只需单击一下即可为类变量/成员变量生成getter和setter。
答案 6 :(得分:0)
现在你被告知一遍又一遍地使用getter和setter,并且因为你是Java(IDE可以帮助你轻松地制作getter / setter,并且每个人都清楚地使用它们),请阅读这个帖子以帮助添加在你使用它们时有一些平衡: