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

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

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

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

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

4

6 回答 6

5

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

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

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

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


于 2012-09-18T05:11:12.693 回答
4

Getter 和 setter 只是一种面向对象的约定。许多框架会寻找名为“getX()”和“setX(type)”的方法

它们与任何其他方法没有什么不同,但是在方法标头中添加或删除任何内容都会违反约定。

于 2012-09-18T05:14:32.650 回答
2

Getter 和 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 框架都期待这一点。

于 2012-09-19T14:32:48.263 回答
2

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

回答你的问题。

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

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

于 2012-09-18T05:14:58.573 回答
0

正如其他人已经解释了 getter 和 setter 的目的。我想指出您的代码片段中的语法不适合 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;
  }
于 2012-09-18T05:20:13.733 回答
0

这是很久以前被问和回答的,但仍然发布答案以帮助未来的读者。添加到其他成员已经回答的内容。
Getter 和 setter 与普通函数的区别如下:

  1. 与普通方法不同,它们通常不包含业务逻辑。
  2. getter 没有任何参数传递给它
  3. 设置器应该只有一个参数传递给它
  4. 仅用于设置和检索可以是 POJO、DAO、bean 等的类的属性。
  5. 正如其他人已经提到的,这些被 Hibernate、Spring 等框架用于持久化、检索数据和执行许多其他操作。
  6. 用于实现封装和抽象两个基本概念。
于 2015-12-17T17:23:53.103 回答