set 和 get 方法与公共变量的优点[重复]

2023-11-21

可能的重复:
为什么要使用 getter 和 setter?

在类中创建方法来访问私有变量而不是使变量成为公共变量有什么好处吗?

例如,第二种情况比第一种情况更好吗?

//Case 1
public class Shoe{
    public int size;
}

//Case 2
public class Shoe{
    private int size;
    public int getSize(){
        return size;
    }

    public void setSize(int sz){
        size = sz;
    }

}

我有一天在 SO 上看到的,作为答案(由 @ChssPly76 编写)为什么要使用 getter 和 setter

因为从现在起两周(几个月、几年)之后,当您意识到您的 setter 需要做的不仅仅是设置值,你还会意识到 该属性已直接在 238 个其他类中使用:-)

还有更多优点:

  1. getter 和 setter可以进行验证在其中,字段不能
  2. 使用吸气剂你可以获取子类通缉班的。
  3. getter 和 setter是多态的, 字段不是
  4. 调试可以简单得多,因为断点可以放置在一个方法内,而不是靠近该给定字段的许多引用。
  5. 他们能隐藏实施变更:

before:

private boolean alive = true;

public boolean isAlive() { return alive; }
public void setAlive(boolean alive) { this.alive = alive; }

after:

private int hp; // change!

public boolean isAlive() { return hp > 0; } // old signature 
 //method looks the same, no change in client code
public void setAlive(boolean alive) { this.hp = alive ? 100 : 0; }

EDIT:使用 Eclipse 时的另一个新优势 - 您可以在现场创建观察点,但如果您有 setter,则只需要一个断点,并且...断点(例如在 setter 方法中)可以是有条件的,观察点(现场)不能。因此,如果您只想停止调试器x=10您只能在设置器内使用断点来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

set 和 get 方法与公共变量的优点[重复] 的相关文章

  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • JPanel透明背景和显示元素[重复]

    这个问题在这里已经有答案了 我插入一个背景图e 变成 aJPanel但一些界面元素消失了 以下 Java Swing 元素不会出现 标签标题 标签 usuario 标签 密码 按钮加速器 你能否使图像透明或元素不透明 setOpaque f
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • Java/JAXB:将具有相同名称但不同属性值的 XML 元素解组到不同的类成员

    我正在尝试根据其属性之一将具有多个 Fields 元素的 XML 解析为不同的类成员 这是 XML
  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • java“void”和“非void”构造函数

    我用 java 编写了这个简单的类 只是为了测试它的一些功能 public class class1 public static Integer value 0 public class1 da public int da class1 v
  • @PreUpdate 不适用于 Spring Data JPA

    我有一个实体 Entity EntityListeners MyEntityListener class class MyEntity 还有听者 class MyEntityListener PrePersist PreUpdate pub
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • java JFileChooser 文件大小过滤器

    我知道我可以按文件类型进行过滤 但是可以按文件大小进行过滤吗 例如 JFileChooser 仅显示 3 MB 以内的图片 简短的回答应该是 你尝试过什么 长答案是肯定的 JFileChooser fc new JFileChooser f
  • Java String.format 向整数添加空格

    我有一小段代码 我不明白输出 此输出向我的字符串格式文本添加空格 我做错了什么吗 public class HelloWorld public static void main String args int a1 540 int a2 4
  • Java中的DRY原则[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我一直在读关于DRY https en wikipedia org wiki Don 27t repeat yourself原则 虽然看起来
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • 如何计算文件中单词的长度?爪哇

    我正在尝试编写一个代码来计算文件中特定长度的单词数 例如 How are you 会打印 Proportion of 3 letter words 100 3 words 我想计算长度为 1 2 3 4 5 6 7 8 9 10 11 12
  • 如何表示类的实例与将其作为输入的类之间的关系?

    我有一堂课叫House 这个类的实例是house class House def init self height length self height height self length length def housePlan hou
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • 如何使用 Spring AOP 建议静态方法?

    在执行类的静态方法之前和之后需要完成一些日志记录 我尝试使用 Spring AOP 来实现这一点 但它不起作用 而对于正常方法来说它起作用 请帮助我理解如何实现这一点 如果可以使用注释来完成 那就太好了 也许您应该在使用 Spring AO

随机推荐

  • 适用于 Android 的 Visual Studio 模拟器 - 模拟设备运行需要内部虚拟网络交换机

    Problem 我想用适用于 Android 的 Visual Studio 模拟器但每当我尝试启动它时 它都会失败 日志的最后部分是 27 9 2015 11 10 38 Informational Session Started 27
  • 使用 jQuery 获取多个文件选择的所有值[重复]

    这个问题在这里已经有答案了 可能的重复 使用 javascript 从多文件上传控件中检索文件名 收到
  • 为什么 execve() 的第一个参数必须是可执行文件的路径

    我了解 execve 和系列要求其参数数组的第一个参数与其第一个参数也指向的可执行文件相同 也就是说 在此 execve prog args env args 0 通常与 prog 相同 但我似乎无法找到有关原因的信息 我也理解可执行文件
  • 动态图标 PWA 清单

    我正在使用 angular5 制作一个白色标签 PWA 我想知道是否可以根据 URL 中的信息动态更改清单文件中的 png 图标 我想要为每个独特的组织使用不同的图标 like www mywebsite com organization1
  • 基础的定义必须先于派生合约的定义

    我有两个不同的文件 即 Project1 sol 和 Project2 sol Project2 sol 就像 import Project1 sol contract Project2 address newProject1Address
  • 使用 ggplot 绘制大量时间序列。是否可以加快速度?

    我正在处理数千个气象时间序列数据 可以从此处下载示例数据 https dl dropboxusercontent com s bxioonfzqa4np6y timeSeries txt 在我的 Linux Mint PC 64 位 8GB
  • 使用dispatch_async加速搜索?

    我正在尝试加快我的应用程序搜索速度 当有大量数据时它会出现滞后 所以我正在尝试拆分搜索谓词 on UI通过使用dispatch async not dispatch sync如果我使用它 没有什么不同 问题是当我使用dispatch asy
  • 重新连接后 Chrome net::ERR_HTTP2_PROTOCOL_ERROR 200

    我正在将节点服务器与处理服务器发送事件流的 Express 应用程序一起使用 这是通过启用了 http2 的 NginX 进行代理的 SSE 事件通过 React 应用程序中的 EventSource 来使用 我每 10 秒发送一条心跳消息
  • 记录类型的前向声明

    有没有像标题那样的东西 我正在尝试在转换过程中执行此操作API 结构 并遇到了一些我以前没有遇到过的事情 PFNReaderTranslatedDispatch function var msg TMsg BOOL stdcall PFNR
  • Google 应用引擎实体组

    据我从应用程序引擎教程中了解到 实体组仅出于事务目的而存在 仅在事务需要时才使用实体组 来自教程 位于同一实体组中的定义是具有相同的根 那么 具有超过 1 个层次结构级别有什么用呢 也就是说 为什么我要用 A gt B gt C A是根 B
  • 检查数组中的所有布尔值是否都为 true?

    假设我有这个布尔数组 bool something 4 false false false false 现在 有没有简单的方法可以检查该数组中的所有值是否同时为真 假 而不是这样做 if something 0 false somethin
  • 我必须删除它吗? [Qt]

    在下面的示例中 我是否必须从堆中删除对象 如果是 怎么办 include
  • 我如何准备要发布的 Jetpack compose 应用程序,@Preview 可组合项怎么样?

    我的 Jetpack compose 应用程序的源代码加载了 Preview 可组合项 我通过从源代码中删除所有这些 Preview 可组合项来准备发布我的应用程序 就像我们所做的那样 例如 使用日志方法 有什么办法可以自动化这个删除过程吗
  • 使用浏览器作为桌面 UI

    如何使用浏览器作为桌面应用程序的 UI 到目前为止我想出的方法是 使用所有 HTML Javascript 问题 无法访问文件系统或其他任何内容 在使用应用程序时运行本地网络服务器 问题 用户完成后如何杀死它 我的用户的技术水平不足以使用
  • 通过 .net 会员提供商进行编程登录

    我正在尝试对一段需要当前登录用户进行测试的代码进行单元测试 使用 Net 2 0 Membership Provider 我如何以编程方式作为用户登录以进行此测试 if Membership ValidateUser user1 P ssw
  • 更改 jQuery Mobile 的默认数据主题

    通过 jQuery Mobile 我可以使用自定义主题创建页面 div 现在这可以工作 但要求我在每个页面中以及每次添加新页面时添加此行 我尝试添加data theme s 到 body 标签 但这没有影响 除了每页手动设置之外 还有什么方
  • 确定 matplotlib 轴大小(以像素为单位)

    给定一组axes在 matplotlib 中 有没有办法确定其大小 以像素为单位 我需要根据调整更大或更小的数字来缩放事物 特别是我想更改线宽 使其与轴尺寸成比例 这给出了以英寸为单位的宽度和高度 bbox ax get window ex
  • 如何从对象数组列表中找到最大元素?

    Collections max arraylist 不起作用 并且常规for循环也不起作用 我所拥有的是 ArrayList
  • 保护我的代码免遭逆向工程

    正如类似问题中所讨论的here and here我想保护我的代码免受逆向工程的影响 我的情况是这样的Simucal在他的 优秀 答案中描述here 基本上 归结为 你唯一的机会是 源盗窃的目标是如果您 有一些非常具体 难以 工程师 与您相关
  • set 和 get 方法与公共变量的优点[重复]

    这个问题在这里已经有答案了 可能的重复 为什么要使用 getter 和 setter 在类中创建方法来访问私有变量而不是使变量成为公共变量有什么好处吗 例如 第二种情况比第一种情况更好吗 Case 1 public class Shoe p