我知道这非常微不足道。但是为什么我们定义私有,然后我们使用getter和setter。这更像是为了防止程序员在使用私有变量或方法时出错吗?或者是出于安全考虑。如果出于安全考虑,那么拥有吸气剂或制定者有什么意义呢?我知道我们可以在getter和setter中有限制但是那些if子句主要是为了防止错误而不是隐私限制。例如。我们通常不会说这些成员使用if子句限制对此方法的访问。
感谢。
答案 0 :(得分:11)
自动,不假思索地为每个变量创建getX()
和setX()
方法的做法是错误。正如你所观察到的那样,它几乎毫无意义。
但这是不假思索的部分,这很糟糕。方法比暴露变量无限好,因为正如您所观察到的,您可以控制如何访问基础数据。如果你想关于你正在做什么,并适当地应用mutators和accessors,它们是一个很棒的工具:
synchronized
访问器确保跨线程的严格内存排序。这些只是一些你可以用mutator和accessors做的事情。通过使用它们,您可以轻松更改软件并轻松维护。
答案 1 :(得分:2)
如果允许任何人编辑类中的变量,那么可能会发生非常糟糕的事情。 (例如,如果一个粗心的用户将分母改为零,我们就可以破坏宇宙[或者除以零误差])。定义get()
和set()
方法允许您(程序员)准确定义其他人如何与您的变量进行交互。
答案 2 :(得分:1)
我们使用私有字段并具有getter和setter,因此其他类可以访问这些私有字段。如果我在项目中有两个类,比如Car.java和Driver.java,我们希望Driver对象能够访问Car.java中的私有字段“wheel”(否则Driver无法驱动汽车)。但是如果该字段是私有的,则只能使用返回字段值的getter方法来访问它。 Setters允许外部类改变字段的值。您可以通过将字段公开(或在适当时受保护)而不是私有来避免使用getter和setter。
答案 3 :(得分:1)
它允许您控制对事物的访问.....通过封装对一段数据的访问,您可以自由地更改数据所在的位置,甚至可以使其可计算。即,不是返回字段的值,而是进行一些计算。
但是,与吸气剂和制定者一样好,如果你使用它们太多,那么它就是一个标志,你没有得到一个对象去做你需要的工作。
答案 4 :(得分:1)
还有一个好处,如果你使用getter和setter,它允许子类覆盖如何使用方法访问信息并且更灵活。
答案 5 :(得分:1)
借助一个例子让我解释一下。假设我们有以下类:
class User {
private String username;
private String password;
}
现在在一个多个程序员正在工作的团队项目中。程序员 A 开发了User
类,程序员 B 必须在GUI界面上工作。确定的策略是password
字段不能少于5个字符。但除非您尚未创建数据字段private
,否则 A 和 B 必须始终检查分配给{{1}的新密码的有效性} field。
现在假设在他们password
之后你实现了以下的setter方法:
private
这种方式只有 A 必须对其进行一次编码, B 必须使用它而不必担心该政策。这总是鼓励DRY(不要重复自己)规则。
答案 6 :(得分:1)
Setter amd Getter Method主要用于限制其他人进行任何更改。在Java语言中,我们提供数据隐藏概念。这是由于get和set方法实现的。