首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么时候应该使用自己的getter/setter来直接访问成员?

在面向对象编程中,使用自己的getter/setter方法来直接访问成员变量可以带来以下优势:

  1. 封装性:getter/setter方法可以封装成员变量,使其不直接暴露在类的外部,提高了代码的安全性和可维护性。
  2. 易于修改:当需要修改成员变量的实现或者访问方式时,只需要修改getter/setter方法,而不需要修改所有直接访问该成员变量的代码。
  3. 易于调试:通过getter/setter方法可以在访问或修改成员变量时添加额外的逻辑,例如输入验证、日志记录等,有助于调试和错误排查。
  4. 易于继承:在继承一个类时,如果使用了getter/setter方法,子类可以重写这些方法来改变或扩展父类的行为,而不需要直接访问父类的成员变量。

在以下场景中,应该使用自己的getter/setter方法来直接访问成员:

  1. 当需要对成员变量进行额外的操作或验证时,例如对输入进行限制或者在getter方法中计算某个值。
  2. 当需要封装成员变量时,以保护类的内部实现和提高代码的可维护性。
  3. 当需要在访问或修改成员变量时添加日志记录或其他逻辑时。
  4. 当需要在继承一个类时重写getter/setter方法来改变或扩展父类的行为。

推荐的腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云CVM:https://cloud.tencent.com/product/cvm
  2. 腾讯云CLB:https://cloud.tencent.com/product/clb
  3. 腾讯云COS:https://cloud.tencent.com/product/cos
  4. 腾讯云CDN:https://cloud.tencent.com/product/cdn
  5. 腾讯云TKE:https://cloud.tencent.com/product/tke
  6. 腾讯云CDB:https://cloud.tencent.com/product/cdb
  7. 腾讯云Ckafka:https://cloud.tencent.com/product/ckafka
  8. 腾讯云Cmem:https://cloud.tencent.com/product/cmem
  9. 腾讯云CAT:https://cloud.tencent.com/product/cat
  10. 腾讯云EIAM:https://cloud.tencent.com/product/eiam

请注意,这些产品的名称和概念可能与其他云计算品牌商的产品相似,但它们是腾讯云特有的产品,可能具有不同的特点和应用场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

荐读|属性与可直接访问数据成员之间应该如何选

直到看到世界世界知名专家Bill Wagner那本《More Effective C#》之后才意识到应该尽量“使用属性而不是可直接访问数据成员”。因为属性具有修改便捷性,多线程支持等等。...,这使得开发者能够通过属性实现很多功能,例如,可以给gettersetter 设定不同访问权限。...与直接通过数据成员编程方式相比,自动属性可以省去大量编程工作,而且开发者可以通过该机制轻松地定义出只读属性。...采用隐式写法时,开发者不用自己在属性gettersetter中编写过多逻辑。...总结 今天给大家介绍了使用属性来访问数据成员诸多优势,因此建议如果要在类型公有或受保护接口中发布数据,那么应该以属性形式发布,对于序列或字典来说,应该以索引器形式发布。

1K30

Java GetterSetter “防坑指南”

通过使用 Getter/Setter 方法,变量访问(get)和更新(set)将变得可控。...操作符对其进行访问,从而使 settergetter 无效。这种情况解决方法很简单,直接使用更加“严格”访问修饰符,例如 protected 和 private。...相反,我们应该找到一些方法,将对象值赋值到内部成员变量中,比如使用 System.arraycopy() 方法将元素中一个数组复制到另一个数组中。...这是由于 Getter 方法直接返回了内部成员变量 scores 引用,因此,外部代码可以获取到该引用并对元素进行修改。...或者更糟糕是,别人可以通过隐式操纵 Getter 或者 Setter 参数并从中获取对象轻易地“蹂躏”你程序。 请小心使用,避免踩坑。

1.2K40

精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

gettersetter,还自动向类中添加适当类型实例变量,也可以用synthesize语法指定实例变量名字 @protocol 和category中如何使用@property?...,那么编译器会自动为你加上这两个方法 3、@dynamic告诉编译器∶属性settergetter方法由用户自己实现,不自动生成。...同时重写了settergetter时,系统就不会生成ivar,使用@synthesize foo =_foo;关联@property 与ivar 重写了只读属性getter使用了@dynamic...类方法: 类方法是属于类对象 类方法只能通过类对象调用 类方法中self是类对象 类方法可以调用其他类方法 类方法中不能访问成员变量 类方法中不能直接调用对象方法 实例方法: 实例方法是属于实例对象...实例方法只能通过实例对象调用 实例方法中self是实例对象实例方法中可以访问成员变量 实例方法中直接调用实例方法 实例方法中也可以调用类方法(通过类名)方法 runloop和线程有什么关系?

50400

基础篇-ObjectC继承、类别、属性

继承好处: (1)抽取出了重复代码 (2)建立了类和类之间联系 继承缺点:耦合性太强 属性 在OC中定义变量,可以自己定义变量setter方法设置变量值,用getter方法获取变量值...,但是当变量数量增多时,还采用手动添加setter/getter方法操作变量,就会使得程序代码量大大增加,于是就出现了 @property 快速声明设置获取变量方法,这也许就是  @property...@property是一个属性访问声明以及声明getter,setter方法, 扩号内支持以下几个属性:(getter=getterName,setter=setterName,设置settergetter...: 每次要为一个属性写上gettersetter,不得不手十分麻烦,所以有了更简单写法, 在.h文件里,直接这样写,表示声明了一个实例属性和它gettersetter器 @property int...settergetter改进优化: 可以看到,getter方法名直接就是变量名,方法名和变量名一样,容易让人迷糊,所以,可以这样优化。

1.7K10

OC-基础总结(二)

对象应该什么时候被回收? 当有人使用这个对象时候,这个对象就千万不能回收。只有在没有任何人使用这个对象时候,才可以回收。 引用计数器 1)....当1个指针值为nil,通过这个指针去调用对象方法(包括使用点语法)时候,不会报错,只是没有任何反应,但是如果通过直接访问属性 -> 就会报错。...所以,还要自己手动在dealloc中release。 5). 与生成只读、读写封装。 readwrite: 默认值,代表同时生成getter setter。...所以需要自己gettersetter声明,如果也需要自己定义属性,这个属性就必须在本类中。...在分类方法实现中不可以直接访问本类真私有属性(定义在本类@implementation之中),但是可以调用本类getter setter访问属性。

922100

OC知识--成员变量(属性,实例变量)相关知识

这样写好处在下边会提到 2. settergetter方法 我们无法从外界(比如其他类和文件中)直接访问定义在类中成员变量。...为了能够从外界操作成员变量,我们需要为调用者提供相应方法成员变量进行访问、赋值等操作。而定义这些方法都需要有一个有意义名字,所以就有了getter-setter方法。...点语法注意 点语法本质是方法调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应方法调用 如果没有settergetter方法,则不能使用点语法 不要在settergetter方法中使用本属性点语法...@public 公开 在有对象前下,任何地方都可以直接访问 @protected 受保护 只能在当前类和子类对象方法中访问 @private 私有的 只能在当前类对象方法中才能直接访问...,只是有的它不能直接访问

2.4K60

OC-基础总结(一)

因此如果方法不需要直接访问属性,也不需要直接调用其他对象方法,那么我们就可以直接将这个方法定义为类方法。 继承 子类从父类继承,就意味着子类拥有了父类所有成员,包括属性和方法。...子类从父类继承,相当于子类模板中拥有了父类模板中所有成员。 创建一个子类对象,仍然是根据子类模板创建对象,只不过子类模板中拥有父类属性和方法,也有子类自己属性和方法。...如果属性没有封装setter getter 是无法使用点语法。 @property @property 自动生成getter setter 方法声明。 原理:由编译器在编译时候自动生成。...自动生成这个属性 setter getter方法声明和实现。直接将参数值赋值给自动生成私有属性,直接返回生成私有属性值。...@property生成set get方法和成员属性,但是如果同时重写了setter getter方法,那么就不会自动生成私有属性了。需要自己写。

1.2K110

Java开发编程规范: 4.OOP 规约

【强制】避免通过一个类对象引用访问此类静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 说明:getObject()与 get0bject()问题。...说明:POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何 NPE 问题,或者入库检查,都由使用保证。...所有 Service 和 DAO getter/setter 方法放在类体最后。...【推荐】setter 方法中,参数名称与类成员变量名称一致,this.成员名 = 参数名。在 getter/setter 方法中,不要增加业务逻辑,增加排查问题难度。...【推荐】类成员与方法访问控制从严:      1) 如果不允许外部直接通过 new 创建对象,那么构造方法必须是 private。

92341

Java GetterSetter

Getter是一种读取变量值方法。Gettersetter 在Java 中也称为访问器和更改器。 2.为什么我们需要GetterSetter?...通过使用gettersetter,程序员可以控制如何以适当方式访问和更新其重要变量,例如在指定范围内更改变量值。...这种情况解决方法是使用更多受限制访问修饰符,例如protected和private: ​ private String firstName; 错误2:直接Setter中分配对象引用 ​ private...由于getter方法直接返回内部变量score引用,因此外部代码可以获得该引用并更改内部对象。 这种情况解决方法是,我们应该返回对象副本,而不是直接getter中返回引用。...将原始集合中克隆项添加到新集合中。 8.为自己类型实现gettersetter 如果定义对象自定义类型,则应clone() 为自己类型实现该 方法。

6.8K11

Lombok - 让Java代码飘起来

,每个private修饰成员变量都有一个settergetter方法,今天要讲Lombok就是可以自动帮你生成settergetter神器!...那么可能就要开始杠了,为什么不能用public修饰,这样settergetter直接可以不用写了,还用什么神器?但是规范就是规范,为了变量访问权限控制在自己手中,所以必须用private修饰。...和@Getter 这两个注解用在类上就是为所有的private成员变量添加gettersetter方法,如果放在成员变量上,就是为单个成员变量添加settergetter方法 @Slf4j 我们平时使用...使用@Slf4j注解之后,lombok帮你创建了一个名为loglogger,可直接使用。 @ToString 这个不推荐使用,虽然可以帮你生成toString方法,但是往往不符合我们要求。...,在使用完后总会调用close()关闭这个流。

20320

Vue3 源码解析(八):ref 与 computed 原理揭秘

函数逻辑为先使用 isRef 判断是否为 rawValue,如果是的话则直接返回这个 ref 对象。 否则返回一个新创建 RefImpl 类实例对象。...或者它也可以使用具有 get 和 set 函数对象创建一个可写 ref 对象。...// 这种场景下如果在 DEV 环境下访问 setter 则报出警告 setter = __DEV__ ?...getter 函数无疑,此时将 getter 赋值,并且在 DEV 环境中访问 setter 不会成功,同时会报出警告。...当我们在学会使用这些同时,并能知其所以然一定能够帮我们在使用这些 api 时发挥出它最大作用,同时也能够让你在写出了一些不符合你预期代码时候,快速定位问题,能搞定究竟是自己不对,还是本身 api

1.2K30

iOS_Extension、Category、load、initialize

(所以尽量不起同名方法,除非是故意想覆盖) ​ Category中声明属性,只会生成settergetter声明,不会实现settergetter成员变量 如: // MOPerson+Fitness.h...因此,不应该依赖initialize进行复杂初始化。 ​...分类不是类没有自己isa,只会将自己methodattach到主类,并不会影响到主类IvarList`。 ​...objc_method_list结构体(可以修改另一个指针,即*methodLists增加成员方法,虽不能扩展methodLists指向内存区域,却可以改变这个内存区域值);Runtime时...可以添加属性,只是系统不会自动为Category中属性实现settergetter方法;因为不能添加实例变量,所以需要通过runtime动态绑定方式,实现settergetter方法。

47800

面向对象思想,谈面试过程?

4 个重要概念: 成员变量(有时叫做域,有时叫做字段,有时叫做属性)name; 成员变量访问器(有时叫做 getter/setter)getName() 和 setName(); 构造方法(有时叫做构造器...在初学 Java 编程时候,我经常产生一个疑惑:为什么不使用 public 修饰成员变量呢?这样做不是比 getter/setter 更方便吗? 我最先想到答案是这样: ?...隐藏类实现细节; 让使用者只能通过事先定制好方法(getter/setter)来访问数据,可以方便地加入控制方法,限制对成员变量不合理操作; 便于修改,增强代码维护性和健壮性; 提高代码安全性和规范性...第一,类成员变量使用基本类型很容易造成NullPointException错误;第二,在 getter/setter 增加业务逻辑的确很容易把实际问题隐藏起来。 那,好答案究竟是什么呢?...如果设置成员变量为 public,那么每个调用者都可以读写它,但如果以 private 配合 getter/setter 形式访问时,就可以达到“不准访问”、“只读访问”、“读写访问”以及“只写访问

47420

Java开发手册之OOP规约

大家好,又见面了,我是你们朋友全栈君。 【强制】避免通过一个类对象引用访问此类静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。...3) 【推荐】所有的局部变量使用基本数据类型。 说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何 NPE问题,或者入库检查,都由使用保证。...Service和DAOgetter/setter方法放在类体最后。...【推荐】setter方法中,参数名称与类成员变量名称一致,this.成员名 = 参数名。在 getter/setter方法中,不要增加业务逻辑,增加排查问题难度。...【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过new创建对象,那么构造方法必须是private。 2) 工具类不允许有public或default构造方法。

39710

Yii框架gettersetter方法功能与用法分析

本文实例讲述了Yii框架gettersetter方法功能与用法。分享给大家供大家参考,具体如下: 1.属性 在 PHP 中,类成员变量也被称为属性。...为解决该问题,Yii 引入了一个名为 yii\base\Object 基类, 它支持基于类内 gettersetter(读取器和设定器)方法定义属性。...getter/setter 定义属性用法与类成员变量一样。两者主要区别是: 当这种属性被读取时,对应 getter 方法将被调用;而当属性被赋值时, 对应 setter 方法就调用。...类似的,只有 setter 方法而没有 getter 方法定义属性是只写属性, 尝试读取这种属性也会触发异常。使用只写属性情况几乎没有。...这类属性不支持可见性(访问限制)。定义属性 gettersetter 方法是 public、protected 还是 private 对属性可见性没有任何影响。

94231

Java基础语法(七)——类和对象

所以,在静态成员方法里不可以使用非静态变量。 静态成员方法调用: ?   直接通过 类进行调用,静态成员方法不依赖于对象。所以,无需创建实例对象就可以进行调用。...(2)getter and setter 方法   当我们使用 private 修饰字段时候, 就无法直接使用这个字段了.   ...此时如果需要获取或者修改这个 private 属性, 就需要使用 getter / setter 方法. getter and setter 方法实现: ?...在 VSCode 中可以使用鼠标右键菜单 -> 源代码操作 中自动生成 setter / getter 方法. getter and setter 快捷设置 alt+insert 启动 ?...this.func() 用法: 1.访问当前对象成员方法 this() 用法: 1.访问当前对象自己构造函数 2.只能在构造方法内使用 3.只能使用一个this() 3.只能放在构造方法第一行

41340

Java——OOP(面向对象设计)规范

【强制】避免通过一个类对象引用访问此类静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override 注解。...3) 【推荐】所有的局部变量使用基本数据类型。 说明:POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何 NPE 问题,或者入库检查,都由使用保证。...,所有 Service 和 DAO getter/setter 方法放在类体 最后。...【推荐】setter 方法中,参数名称与类成员变量名称一致,this.成员名 = 参数名。在getter/setter 方法中,不要增加业务逻辑,增加排查问题难度。...【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过 new 创建对象,那么构造方法必须是 private。 2) 工具类不允许有 public 或 default 构造方法。

19910

iOS基础·属性修饰词与setter关系

getter方法 可以自己手动为实例变量在头文件 中声明settergetter方法,并在实现文件中实现settergetter方法。...3.2.3 三种写法比较 @synthesize age = _age; settergetter实现中会访问成员变量_age 如果成员变量_age不存在,就会自动生成一个@private成员变量_...age @synthesize age;//等效下面 @synthesize age = age; settergetter实现中会访问@synthesize后同名成员变量age 如果成员变量age不存在...,就会自动生成一个@private成员变量age 3.2.4 用法场景 当你在子类中重载了父类中属性,你必须使用@synthesize手动合成实例变量。...3.3 @dynamic 3.3.1 介绍 @dynamic告诉编译器:属性settergetter方法由用户自己实现,不自动生成。(当然对于readonly属性只需提供getter即可)。

1.1K20
领券