private String gg;
public void setgg(String gg)
{
this.gg = gg;
}
public String getgg()
{
return gg;
}
考虑到上面的代码,setter和getter用于处理类的私有成员。
问题1。如果setter再接受一个参数,我猜不会是一个setter?
问题2。它们与设置私有数据成员值的普通公共成员函数有何不同?
我知道我们可以在setter中实现对可重用代码的验证并抛出异常,但仍然无法理解真正的目的
答案 0 :(得分:4)
问题1。如果setter再接受一个参数,我猜不会是一个setter?
它将设置值,但它不是许多框架正在寻找设置值的标准setter方法
问题2。它们与设置私有数据成员值的普通公共成员函数有何不同?
它们是具有标准命名约定的普通公共成员方法
查看强>
答案 1 :(得分:4)
Getters和setter只是一个面向对象的约定。很多框架都会寻找名为“getX()”和“setX(type)”
的方法它们与任何其他方法没有什么不同,但在方法标题中添加或删除任何内容都会破坏惯例。
答案 2 :(得分:2)
首先,按照惯例,你的getter setter实现是错误的。它应该是setGg和getGg。
回答你的问题。
Getter setter方法已经成为向对象注入值的标准方法,并且后面跟着许多框架。因此,您需要遵循之前指出的命名约定。
只要它接受相同的参数并且设置值相同即可。但是如果你不遵循命名约定,那么大多数框架都无法为对象注入值。
答案 3 :(得分:2)
Getters和setter已经成为Java世界中事实上的标准,用于封装:一个对象隐藏其内部实现与关联类的想法。这是面向对象编程的总体原则。
以下面的课程为例:
// boilerplate
public class A {
public String b;
}
这是一个完全有效的Java类,只有一个字段。如果另一个班级希望阅读A的B属性,那么它所需要的只是:
A a;
String val = a.b;
和写作:
a.b = val;
这里的问题是A不再控制写入其内部状态。假设我们了解到b的最大长度为1024个字符。现在必须更新每个写入b的实例以适应新要求。根据代码库的大小,这可能非常昂贵。
或者,假设我们使用了getter和setter约定来封装b:
// boilerplate
public class A {
private String b;
public void setB(String val) {
this.b = val;
}
public String getB() {
return this.b;
}
}
现在看起来像:
A a;
String val = a.getB();
并写道:
a.setB(val);
短期内写入需要更长的时间,但只需更改设置器,就可以更容易地进行整合。
正如许多其他评论者指出的那样,封装是如此受到高度重视,许多Java框架都希望如此。答案 4 :(得分:0)
正如其他人已经解释了吸气剂和制定者的目的。我想指出代码片段中的语法不适合java bean标准。
private String value;
public void setValue(String value) {
this.value=value;
}
public String getValue() {
return value;
}
表示布尔值
private boolean val;
public void setVal(boolean val) {
this.val= val;
}
public boolean isVal() {
return val;
}
答案 5 :(得分:0)
这被问及很长一段时间回答,但仍然发布答案,以帮助未来的读者。增加其他成员已经回答的内容 Getter和setter与以下方式不同于正常功能: