通常在java bean类中,我们将变量声明为private。无论如何,我们将setter和getter方法声明为public。然后我们就可以获得并设置属性的值。那么在这里将变量声明为私有的用途是什么?如果我宣布为公开会发生什么?
提前致谢..
答案 0 :(得分:9)
这是encapsualtion的目的。
考虑拥有age
属性,并且您希望对其进行一些控制。如果您将字段简单地公开,则可以从外部访问它并随意执行任何操作。然后,检查年龄有效可能有点麻烦。
话虽如此,使用setter方法,您可以使用适当的验证机制。这使您可以控制访问和更改变量的方式和时间。
这同样适用于getter方法。想象一下,你有一些你不想暴露的内部结构,比如你在内部使用枚举。但是,您不希望在课堂外显示此信息。因此,例如,在你的getter中,你会得到你想要产生的任何值的字符串版本。
答案 1 :(得分:1)
您可以在将值设置为实例变量之前进行验证,如下所示:
class HeightBean {
private int height;
public int getHeight() {
return height;
}
public void setHeight(int height) {
if(height<0)
height=0;
this.height = height;
}
}
大多数框架使用bean setter和getter来访问数据。例如,
<jsp:useBean id="name" class="java.lang.String" scope="session">
</jsp:useBean>
<jsp:getProperty property="bytes" name="name"/>
答案 2 :(得分:0)
它提供了一个选择。您可能会也可能不会提供getter和setter。
例如,在不可变对象的情况下,仅提供getter是一种常见的设计选择。
经验法则:使用尽可能少的能见度。
答案 3 :(得分:0)
这个的主要原因可能是:
限制读写访问和不变性:
如果我想将元素设为只读。我会将getter公开为公开和
我只能设置一个setter,使属性可配置,如果我想在设置值时做任何验证。
吸气者可以制作防御性副本。
您可以关联侦听器,以通知setter方法中的任何值更改。
如果一个字段依赖于另一个字段,您可以将该逻辑放在setter方法中,否则您将始终必须编写一个样板代码来管理它,至少仍然需要一个函数调用。这可以转移到setter。
但是拥有一个公共属性而不是setter和getter并没有给出这么多的灵活性。如果不编写额外的函数和调用开销,就不能执行1到5的操作。