我想知道为什么在java中使用getter和setter方法。如果您可以通过getter和setter读取或修改私有字段的值,为什么不直接将它们更改为public?我知道吸气剂和制定者必须是合理的,但是不可能放弃它们的直接答案是什么?
答案 0 :(得分:6)
有些原因是:
setter
添加一个检查,以确保该属性上没有设置其他值。getter
即可将其设为“只读”。请参阅@Aditi提供的链接中的答案,原因如下:Why use getters and setters?
答案 1 :(得分:2)
要追踪的最难形成的错误之一是数据项价值的意外,不恰当的变化。
如果数据是公开的,那么进行更改的代码可以在程序中的任何位置。
如果它是私有的,则进行更改的代码必须位于同一个源文件中,通常是同一个类。很容易找到并检测可能会改变它的所有代码,包括它的setter。
答案 2 :(得分:2)
这是将接口与实现(1)分开并准备更改(2)的方法。也许简单的例子可以帮助。
(1)
假设你有一个用户类,它将firstName和secondName存储在不同的字段中。现在你可以使用连接fisrtName和secondName的方法getFullName,但是使用User类的程序员不必知道firstName和secondName是两个单独的字段。
(2)
现在你想要在一个字段中存储User class fullName,所以你要做的就是在User类中进行更改,你不必chagne getFullName方法的所有调用,如果你是的话,你必须做什么直接使用字段。
答案 3 :(得分:1)
将您的字段设为私有以保留Java类中的封装是一种很好的做法。应用程序中的任何内容都不应该知道类的“内部”,这是实现细节。他们唯一需要访问的是对象上的方法,请求值或执行进程。
在某些情况下,您可能希望将某些内部值的访问权限授予另一个类。在这种情况下,建议通过getter进行,而不是直接进行。这样,当您需要更改该类的合同和/或其实现细节(如何在内部存储值)时,重构将变得更加容易。
此外,由于这是使用getter / setter的常见模式,这使得您的代码更容易被外部读者或同事读取,并且一些第三方库期望它们在那里。
答案 4 :(得分:0)
通过使用getter和setter而不是直接访问成员变量, - 我们可以进行数据验证。
例如
public void setAge(){
if(age < 0){
//throw exception
}
}