getter和setter如何与普通函数不同?

时间:2012-09-18 05:09:04

标签: java properties getter-setter

private String gg;
public void setgg(String gg) 
  {
   this.gg = gg; 
  } 
public String getgg()
  {
    return gg;
  }

考虑到上面的代码,setter和getter用于处理类的私有成员。

问题1。如果setter再接受一个参数,我猜不会是一个setter?

问题2。它们与设置私有数据成员值的普通公共成员函数有何不同?

我知道我们可以在setter中实现对可重用代码的验证并抛出异常,但仍然无法理解真正的目的

6 个答案:

答案 0 :(得分:4)

  

问题1。如果setter再接受一个参数,我猜不会是一个setter?

它将设置值,但它不是许多框架正在寻找设置值的标准setter方法

  

问题2。它们与设置私有数据成员值的普通公共成员函数有何不同?

它们是具有标准命名约定的普通公共成员方法


查看

答案 1 :(得分:4)

Getters和setter只是一个面向对象的约定。很多框架都会寻找名为“getX()”和“setX(type)”

的方法

它们与任何其他方法没有什么不同,但在方法标题中添加或删除任何内容都会破坏惯例。

答案 2 :(得分:2)

首先,按照惯例,你的getter setter实现是错误的。它应该是setGg和getGg。

回答你的问题。

  1. Getter setter方法已经成为向对象注入值的标准方法,并且后面跟着许多框架。因此,您需要遵循之前指出的命名约定。

  2. 只要它接受相同的参数并且设置值相同即可。但是如果你不遵循命名约定,那么大多数框架都无法为对象注入值。

答案 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与以下方式不同于正常功能:

  1. 与普通方法不同,它们通常不包含业务逻辑。
  2. getter没有传递任何参数
  3. setter只应传递一个参数
  4. 仅用于设置和检索类的属性,可以是POJO,DAO,bean等。
  5. 正如其他人已经提到的,Hibernate,Spring等框架使用它们来持久化,检索数据并执行许多其他操作。
  6. 用于实现封装和破坏的两个基本概念。