繁体   English   中英

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

[英]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。

回答你的问题。

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

  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框架都期望这样。

正如其他人已经解释了吸气剂和制定者的目的。 我想指出代码片段中的语法不适合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在以下方面与正常功能不同:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM