[英]How getter and setter are different from normal functions?
private String gg;
public void setgg(String gg)
{
this.gg = gg;
}
public String getgg()
{
return gg;
}
考虑到上面的代码,setter和getter用于对类的私有成员进行操作。
问题1。 如果setter再接受一个参数,我猜不会是一个setter?
问题2。 它们与设置私有数据成员值的普通公共成员函数有何不同?
我知道我们可以在setter中实现对可重用代码的验证并抛出异常,但仍然无法理解真正的目的
问题1。 如果setter再接受一个参数,我猜不会是一个setter?
它将设置值,但它不是许多框架正在寻找设置值的标准setter方法
问题2。 它们与设置私有数据成员值的普通公共成员函数有何不同?
它们是具有标准命名约定的普通公共成员方法
看到
getter和setter只是一个面向对象的约定。 很多框架都会寻找名为“getX()”和“setX(type)”的方法
它们与任何其他方法没有什么不同,但是从方法头添加或删除任何内容都会破坏约定。
首先,按照惯例,你的getter setter实现是错误的。 它应该是setGg和getGg。
回答你的问题。
Getter setter方法已经成为向对象注入值的标准方法,并且后面跟着许多框架。 因此,您需要遵循之前指出的命名约定。
只要它接受相同的参数并且设置值相同即可。 但是如果你不遵循命名约定那么大多数框架都不能为对象注入值。
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框架都期望这样。
正如其他人已经解释了吸气剂和制定者的目的。 我想指出代码片段中的语法不适合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;
}
这被问及很久以前的回答,但仍然发布答案,以帮助未来的读者。 添加其他成员已经回答的内容。
Getter和setter在以下方面与正常功能不同:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.