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

为什么要在实体中有私有setter

在实体中使用私有setter方法的目的是为了封装实体的属性,并提供对属性的控制和保护。以下是关于为什么要在实体中有私有setter的详细解释:

  1. 封装性:私有setter方法可以将实体的属性隐藏起来,只允许通过特定的方法来修改属性的值。这样可以防止外部直接访问和修改属性,确保属性的安全性和一致性。
  2. 控制访问权限:通过私有setter方法,可以对属性的访问进行控制。可以在setter方法中添加逻辑判断,例如对属性值进行有效性验证、范围检查等,确保属性值的合法性。
  3. 数据一致性:私有setter方法可以在属性被修改时,进行一些额外的操作,例如触发其他相关操作、更新关联数据等,以保持数据的一致性。
  4. 隐藏实现细节:私有setter方法可以隐藏实体内部的实现细节,只暴露必要的接口给外部使用。这样可以降低外部对实体内部结构的依赖,提高代码的可维护性和灵活性。
  5. 防止误用和滥用:私有setter方法可以限制对属性的修改,避免属性被误用或滥用。只有通过特定的方法来修改属性,可以减少错误的发生,并提高代码的可靠性。
  6. 版本控制和扩展性:通过私有setter方法,可以在属性被修改时进行版本控制,记录属性的修改历史。同时,私有setter方法也为后续的扩展提供了更大的灵活性,可以在setter方法中添加新的逻辑和功能。

总结起来,使用私有setter方法可以提供对实体属性的封装、控制和保护,确保数据的安全性和一致性,隐藏实现细节,提高代码的可维护性和可靠性。

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

相关·内容

Getter & Setter:使用还是废弃

私有变量 为什么我们要使用私有的实例变量呢? 因为我们不希望其他类直接的依赖于这些变量。而且在心血来潮时,我们还可以灵活的修改变量类型和实现。...然而,为什么程序员们都自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样?...为什么使用存取方法? 在类中使用存取方法而非直接暴露属性是有理由的。 Getter和Setter使得API更加的稳定。 比如,假设类中有一个公共属性,它可以被其他类直接存取。...对于私有属性规则的理由并不适用于这个特例。这是一个特殊的例外,我也告诉人们不要在他们的类中使用公共属性,但也存在例外。这就是这个规则的一个例外,因为仅仅说它是一个属性会更加简单和安全。...我们退一步想一想:既然这样,为什么要这条规则呢?它是否适用呢?在这个例外中,它并不适用。 私有属性 + 公共存取方法 == 封装?

1.3K60

不,这样的 DTO!

这时候这位程序员提出了质疑:“DTO 应该使用私有的变量和一套相应的 getter、setter 方法!”,“为什么呢?” 我问。 到底是为什么?...为什么我们要用一堆毫无用处的 getter、setter 方法,去遵循那些没有人可以解释的通的教条,来膨胀我们的代码呢? 在我的观点中,面向对象程序包含两种实体:对象和数据结构。...对象有私有属性和公有方法,数据结构只有公有属性并且没有方法(或者只有一些毫无意义的数据访问方法)。...有很好的理由去保持变量的私有性,我们想知道是什么方法在操纵它们,我们可以保护对象的数据,我们不想让其它人依赖对象内部的细节,即 DIP(依赖倒转原则,Dependency Inversion Principle...但另一方面,对一个单纯的数据结构使用 getter 和 setter 并没有什么好处,一个数据结构只是一种数据简单的容器,没别的了!

34410
  • 理解Java的三大特性之封装

    封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系...比如我们将一个房子看做是一个对象,里面的漂亮的装饰,如沙发、电视剧、空调、茶桌等等都是该房子的私有属性,但是如果我们没有那些墙遮挡,是不是别人就会一览无余呢?没有一点儿隐私!...、getter **/ } 上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。...例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。...void(0)' onclick='jy("+id+")'>禁用"; } return czHTML; } 鄙人才疏学浅,只能领悟这么多了,如果文中有错误之处

    31020

    【译】ES提案:公有类字段

    原文链接https://2ality.com/2019/07/public-class-fields.html 这篇博客是关于类定义中新成员的系列文章中的一部分: 公有类字段 私有类字段 私有方法和JavaScript...MyClass.prop, 123); 而静态字段提供了更优雅的解决方案: class MyClass { static prop = 123; } assert.equal(MyClass.prop, 123); 为什么命名为公有字段...它们的名称为"字段",以强调它们与私有字段在语法上的相似程度(这是即将发布的博客文章的主题) 相似的,与私有字段相比,“公有”描述了公共字段的性质。...这些是赞成使用定义的论据: 在类的顶层声明的实体的理想模型是重写:始终创建实体,而不依赖于继承的实体。 通过定义创建属性的先例包括:对象文字中的属性定义和类中的原型声明。...Node.js 12+ Chrome: 公有字段:Chrome 72+ 私有字段: Chrome 74+ 更多信息,参见对应提案

    83520

    【Java提高一】三大特性-封装

    Java提高】三大特性-封装 三大特性之---封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体...比如我们将一个房子看做是一个对象,里面的漂亮的装饰,如沙发、电视剧、空调、茶桌等等都是该房子的私有属性,但是如果我们没有那些墙遮挡,是不是别人就会一览无余呢?没有一点儿隐私!...但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如: ? 上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。...例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。 ?...鄙人才疏学浅,只能领悟这么多了,如果文中有错误之处,望指正,鄙人不胜感激!

    75140

    TW洞见〡getter和setter的那些事

    这些以get和set开头的方法,被称为getter和setter。时间久了,这种做法似乎成了一种神圣的约定,每个人都记得应该这么写,而忘记了为什么这么写。...但是,当你写了很多程序,写过很多getter和setter,尤其是有些类方法,只有getter和setter时,总会有一天,你会疑惑,我到底为什么要这么干? Why private field?...要解释为什么需要getter和setter,先要知道为什么字段应该是private的。 在汇编语言时,数据都是公开的。所谓公开,是指几乎任何指令,都可以作用在任意的数据块上。...那么直接将数据字段设置为public,与通过getter和setter方式来暴露字段,有什么区别? 面向对象编程中有一条非常重要的原则,就是面向接口(Interface)编程。...上面这种property的写法,让Person的调用代码可以很直接的访问私有变量。 ? 另一个提供property特性的语言是Python。 ?

    89160

    Android项目中实体类entity的作用详解

    估计很多入门安卓的朋友对entity很困惑,为什么要写实体类?有什么用?写来干什么? 对于实体类的理解我入门的时候也是困惑了好久,后面用多了才慢慢理解,这篇博客就当复习和笔记。...Java中entity(实体类)的写法规范 在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法。...在项目中写实体类一般遵循下面的规范: 1、根据你的设计,定义一组你需要的私有属性。 2、根据这些属性,创建它们的setter和getter方法。(eclipse等IDE可以自动生成。具体怎么生成?...一、实体类的名字尽量和数据库的表的名字对应相同。 二、实体类应该实现java.io.Serializable接口。 三、实体类应该有个无参的构造方法。...四、实体类应该有个有参(所有的参数)的构造方法。 五、实体类有属性和方法,属性对应数据库中表的字段,主要有getter和setter方法。 六、实体类还应该有个属性serialVersionUID。

    1.5K31

    MyBatisPlus笔记

    2.3 删除 在进行删除之前,我们可以分析下删除的方法: int deleteById (Serializable id) Serializable:参数类型 思考:参数类型为什么是一个序列化类?...Tom888"); user.setPassword("tom888"); userDao.updateById(user); } } **说明:**修改的时候,只修改实体对象中有值的字段...反过来看看模型类的编写都需要哪些内容: 私有属性 setter…getter…方法 toString方法 构造函数 虽然这些内容不难,同时也都是通过IDEA工具生成的,但是过程还是必须得走一遍,那么对于模型类的编写有没有什么优化方法...概念 Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发。...步骤3:模型类上添加注解 Lombok常见的注解有: @Setter:为模型类的属性提供setter方法 @Getter:为模型类的属性提供getter方法 @ToString:为模型类的属性提供toString

    38720

    Java神奇lombok创建实体

    创建实体 为了方便演示lombok的神奇之处,我们简单创建一个用户实体,基于该实体进行配置lombok注解,实体代码如下所示: ?...实体类 如果想让lombok生效我们还需要针对idea工具进行插件的安装,下面我们按照顺序打开Idea配置File > Settings > Plugins > Browse repositories....@Data注解 我们使用@Data注解就可以涵盖@ToString、@Getter、@Setter方法,当然我们使用构造函数时还是需要单独添加注解,下面我们修改实体类添加@Data注解代码如下所示:...javaagent:lombok.jar 重启eclipse/myeclipse 最后需要注意的是,在使用lombok注解的时候记得要导入lombok.jar包到工程,如果使用的是Maven Project,要在...;更多说明参考Builder @SneakyThrows:自动抛受检异常,而无需显式在方法上使用throws语句 @Synchronized:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性

    1.5K81

    POJO简介

    二:为什么会有POJO? 主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。...其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法...是不包含业务逻辑的透明组件,就像其命名那样,它的确简单,只用作单纯的DTO(Data Transport Object 数据传输对象)或是VO(Value Object 值对象).它通常的构成形式为一个包含私有变量作为属性以及访问其属性的...PO是位于EIMS层数据库中的实体,生命周期和数据库密切相关.在向数据库插入记录时创建该实体,删除或关闭数据库时该实体随之消亡.很多优秀的开源框架都实现了将数据库中的PO通过ORM用POJO来实际操作,...pojo与实体bean: pojo 应用于页面数据的操作,是来保存数据的。(你也可以不这样做,但是这已经成了一种规范。) 实体bean与数据库表关联,是对数据表的操作。

    1.6K30

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

    对于界面相似度很高的情况下,使用继承可以节省很多代码和设置,只需要在子类中重写父类中的方法,或者增加新的子类方法即可,代码非常的简洁维护起来也很方便。下面小节下相关的知识,供需要的朋友查看。   ...这里说的方法需要在 父类中的 .h中声明,子类才可以使用super 调用父类的方法,可以继承过来父类的一切属性,可以使用父类的成员变量。...所以把 .m 文件中的东西相当于是 私有的,不会被非本类的对象所调用。  ...对象中有一个isa指针,该指针指向调用该对象的类。...官方文档中有这样的示例代码:// The following declaration is a synonym for: @property(retain) MyClass *myObject;@property

    1.9K10

    OC-基础总结(一)

    如果表示的实体没有行为,只有属性。 那么如果属性比较少,只有几个,那么这个时候就定义为结构体,分配在栈,提高效率。...将生成的私有属性的值返回 希望@synthesize 不要生成私有属性,setter getter 的实现中操作我们已经写好的属性就可以了。...@synthesize @property名称 = 已经存在的属性名; @synthesize age = _age; 不会再去生成私有属性 直接生成setter getter的实现 setter的实现...Xcode 4.4之后,只要写一个@property 编译器会自动生成私有属性,并且自动生成getter setter 声明和实现。...自动生成这个属性的 setter getter方法的声明和实现。直接将参数的值赋值给自动生成的私有属性,直接返回生成的私有属性的值。

    1.3K110

    Kotlin 类和对象介绍

    } } class Demo4{ constructor(name:String){ println("name:${name}") } } //定义构造方法 私有...如果我们要在主构造器创建时进行初始化操作,那么我们直接在init{}函数里面实现我们的逻辑即可....函数 介绍:通常情况下var定义的类都有默认的geter和setter.如果定义为val标签额属性那么它将没有set函数 我们也可以根据需求,进行重构属性的getter和setter函数 实例1: class...但是已经有嵌套类了.为什么还有一个内部类? 因为内部类会带有一个对外部类的对象的引用.所以内部类是可以直接访问外部类的属性和函数....仅当前类或同一个文件可访问 protected 保护,在同一个类或者子类之中可访问 public 公共,全部地方都可访问 internal 内部,在同一个模块下可访问 Kotlin的关键字其实和java之中有很多的相识之处

    20330

    HQ移动20170317期周报

    改好了但是却一下子真不懂啊,于是我自己写了一个 demo 测试,发现在那块类似的判断是一样的,所以其中的判断是肯定没问题的,还是我们项目中有问题的。...后来才发现原来是我们项目中有一个: #import /*!...7 再次想私有成员变量 今天突然想起,为什么有属性的时候,为什么还要再直接用成员变量呢?它有什么方便之处呢?...执行速度更快,IPA体积更小 ( 从 iOS 开发中的争议(一)得知) 感觉个人平常很少用成员变量,当然除了在 init 和 dealloc 、getter、setter中 除外咯,其他地方例如临时生成一个...但是细细想来,一些临时的值确实没必要经过 setter 和 getter 方法,所以想着还是直接用 成员变量的。

    50530

    关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!

    例如:我们使用Beautifulsoup进行网页解析,通过类方法定位时,会找某个标签它的存在class=‘xxx’的情况,此时css的class与Python中的类重名,需要在class后添加单下划线进行区分...双前导下划线 这个为什么放在最后,因为压轴啊!双前导下划线,在面试中被考到的几率太大了,尤其是那种长相猥琐,心术不正的面试官,最爱问这个知识点,所以要牢记。...这就要说为什么刚才我说双前导下划线90%的情况下是真切的私有变量了、让我们来看下面的例子: class Demo: def __init__(self): self....__money @money.setter def money(self, pwd): pass D = Demo() D.money = 1000000...而通过property创建了一个money的属性,当用户对money赋值时,money.setter的方法是空的,你怎么赋值都是无用的(空的干嘛还要写,因为不写会报错啊...AttributeError

    3.2K10
    领券