我正在写一个游戏,我有一个输入类,其中包含所有不同键的布尔值。我在主游戏类中创建了这个类的一个实例。布尔值是否可以公开,或者我是否应该使用访问器访问它们?
发布于 2012-03-12 16:29:33
如果您有一个private Map<String, Boolean> keyStates
,并且所有的键都初始化为false
,而不是每个键都有一个boolean
,那么它将更具可读性,也更容易编码。那么你的访问器可能是:
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是面向对象软件工程的组成部分,也是从技术角度看互联网成为可能的主要设计原因。
发布于 2012-03-12 16:25:48
这主要是个人喜好的问题-我相信你会发现人们在争论双方,我会说这不是非黑即白的问题,而是取决于这个类有多“庞大”。
使用getter和setter的基本原理是,您可以将实际表示抽象为一个字段,以便在不更改接口的情况下自由地将其表示为派生值。所以实际上这取决于这个类的接口对你有多大的价值。
如果它是您的第一类公共接口的一部分,那么一定要使用getter和setter。在另一个极端,如果它是一个简单的数据容器,比如只在单个类中使用的元组(例如,在转换到另一个类之前映射数据库行),那么我会毫不犹豫地使用字段;接口没有真正的价值,因为它只在内部使用。
那么有多少类/包会使用这个类呢?如果它是一个私有的“本地”类,那么我不认为仅仅使用字段并在需要更改时更新调用者没有任何问题。
如果字段也是final
的,那么访问字段就容易得多,这类对象通常就是这种情况。
发布于 2012-03-12 16:22:34
一般来说,我推荐使用getter和setter,因为它们更简洁、更有条理、更具可读性。如果你有很多不同的程序员在看你的代码,这也会有帮助。我的观点是始终将变量设置为私有的,除非您出于特定原因需要公开它们。如果性能确实是游戏中的一个问题,那么通过减少函数调用,将变量设置为公共变量将有所帮助。
https://stackoverflow.com/questions/9670749
复制