向我解释什么是二传手和吸气剂

时间:2010-04-15 21:26:35

标签: oop

什么是二传手和吸气鬼?我为什么需要它们?以有效的方式使用它们的好例子是什么?安装者和吸气剂有什么意义?

更新: 我可以获得一些编码示例吗?

6 个答案:

答案 0 :(得分:13)

getter是一种获取属性值的方法。 setter是一种设置属性值的方法。关于它们的功效有一些争论,但要点通常是:

  • 完整封装

  • 在内部细节发生变化的情况下维持一致的界面

更有用的是当您需要在获取或设置时添加一些逻辑,比如在编写之前验证值。

答案 1 :(得分:9)

getter / setter用于隐藏宣传中的私人字段(您可以避免直接访问字段)。

getter允许您在内部字段中使用之前检查提供的值。例如,setter允许您应用不同的格式或仅限制写访问(例如,对派生类)。

getter的一个有用的应用程序可能是某种延迟加载:后备字段(getter隐藏的私有字段)被初始化为null。当您要求getter返回值时,它将检查null并使用更耗时的方法加载该值。这只会在第一次调用时发生,之后getter将始终提供已经加载的值。

答案 2 :(得分:4)

Getters& setter将接口(getter / setter函数)与实现分开(实际存储数据的方式)。

答案 3 :(得分:2)

Getters和Setter允许您控制如何访问或更改对象的数据成员。

相反,如果您将数据成员直接暴露给对象的用户,则用户可以随意更改它们,并且对象甚至不知道它们已被更改。

不希望别人阅读数据成员?使数据成员保持私有,并且不要编写将值返回的getter。不希望别人修改数据成员?将数据成员设为私有,不要为其编写setter。想要控制允许值的范围?把它放在二传手中。

答案 4 :(得分:2)

可能会出现的一个问题是,如果使用方法而不是直接字段访问可能会降低性能。 答案并不是编译器优化代码,因此如果您的方法仅执行return field;,其中field是您使用setter / getter隐藏的类中的字段,它实际上将直接访问该字段。因此,在大多数情况下,您可以获得相同的性能,同时保留稍后更改set / get方法的选项。

Joshua Block的有效Java编程是一本很棒的书,提供了如何编写优秀代码的技巧,并解释了原因。为什么使用setter / getter是其中一个提示。

注意:您可能会注意到,在某些书籍/文档字段中,呈现setter / getter而不是可直接访问的字段称为“属性”而不是字段。例如。在C#中,你甚至可以指定一个字段是一个属性,你不需要再定义set / get(我认为很好的特性)。

答案 5 :(得分:1)

公共访问者(getter和setter)有时会有意义。 (我很生气,我不仅要记录一个类的成员变量,还要记录两个无意义的访问器方法。)

除了Jason S.提到的案例外,它通常对封装没有帮助。

从数据库加载的一些char的java示例,但应该表示为布尔值

char boolFromDb;

public boolean getBoolFromDb() {
    return boolFromDb == 'T';
}

public void setBoolFromDb(boolean newValue) {
    boolFromDb = newValue ? 'T' : 'F';
}
相关问题