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

我应该使用永远不会改变的字段值的访问器吗?

这个问答内容涉及到一个编程设计的问题,即是否应该使用永远不会改变的字段值的访问器。

在编程中,我们通常会使用访问器(accessor)来访问对象的属性。访问器是一种设计模式,它允许我们在访问对象的属性时执行一些额外的操作,例如验证、转换或计算。使用访问器可以使我们的代码更加灵活和可维护。

在这个问题中,我们需要考虑到字段值是否会改变。如果字段值永远不会改变,那么我们可以使用访问器来访问这个字段。这样做的好处是,我们可以在访问器中添加一些额外的逻辑,例如缓存、日志记录或计算。此外,使用访问器还可以使我们的代码更加可维护和可扩展。

然而,如果字段值可能会改变,那么我们应该避免使用访问器来访问这个字段。这是因为,如果我们使用访问器来访问这个字段,那么我们可能需要在每次访问时执行一些额外的操作,这可能会导致性能下降。此外,如果我们在访问器中添加了一些逻辑,例如缓存或日志记录,那么这些逻辑可能会在字段值改变时失效,从而导致错误。

总之,是否应该使用永远不会改变的字段值的访问器取决于我们的具体需求和场景。如果我们需要在访问字段时执行一些额外的操作,并且字段值永远不会改变,那么我们可以使用访问器。如果字段值可能会改变,那么我们应该避免使用访问器。

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

相关·内容

公司应该使用AI?英伟达, DeepMind 等10家AI机构试图用这份报告为你解答

大数据文摘作品 作者:魏子敏、龙牧雪 “公司应该使用AI?”...大到传统行业巨头领导者,小到初创公司,从健康、零售、广告、金融到交通、教育、农业,在ai产生巨大变革时代,每个公司领导层都在问自己这样问题。...近日,来自DeepMind、谷歌大脑、OpenAI、英伟达等10家科技企业顶级大脑试图帮你回答这个问题,并发布了白皮书《你企业应该使用人工智能?》。...Ankur Handa, OpenAI: 认为AI对医疗、公共服务和政府等关键决策将带来积极影响。...使用AI也更会容易——每个人都将能用AI创造和创新。 以下为报告全文,关注大数据文摘,进入公众号后台回复“商业” 即可下载PDF版报告。

60820

数据字段防卫探索

排查之后发现,原因是data.result.xxxlist是undefined 顿时一万匹草泥马在心里奔腾而过,不是说好是个列表,没有列表应该返回[]呀 没办法,小Y只能紧急修复代码: DB.getData...有人会说,这只是小Y不够严谨,当需要用某些字段时候,就应该先检测 那就又疏忽了,人也是不可信,当bugfix很紧急时候还记得?别人写代码能控制?...在浏览不支持情况下,这个方案可以被枪毙了 -_-!!...方案三:封装获取数据字段接口 获取数据字段不是原生object.key,而是util.get(object, key),在get方法里面进行防卫处理 优点:实现统一简单 缺点:改变了原来编程习惯...obj.count : {}; obj.count.count = 6; } 通过工具保证,在访问object.key之前,object不会是undefined或者是null 优点:透明 缺点

31820
  • 数据字段防卫探索

    排查之后发现,原因是data.result.xxxlist是undefined 顿时一万匹草泥马在心里奔腾而过,不是说好是个列表,没有列表应该返回[]呀 没办法,小Y只能紧急修复代码: DB.getData...有人会说,这只是小Y不够严谨,当需要用某些字段时候,就应该先检测 那就又疏忽了,人也是不可信,当bugfix很紧急时候还记得?别人写代码能控制?...在浏览不支持情况下,这个方案可以被枪毙了 -_-!!...方案三:封装获取数据字段接口 获取数据字段不是原生object.key,而是util.get(object, key),在get方法里面进行防卫处理 优点:实现统一简单 缺点:改变了原来编程习惯...obj.count : {}; obj.count.count = 6; } 通过工具保证,在访问object.key之前,object不会是undefined或者是null 优点:透明 缺点

    65450

    String类不可变分析以及普通不可变类

    三String对象真的不可变? 从上文可知String成员变量是private final ,也就是初始化之后不可改变。...那么在这几个成员中, value比较特殊,因为他是一个引用变量,而不是真正对象。value是final修饰,也就是说final不能再指向其他数组对象,那么改变value指向数组?...字段 Field valueFieldOfString = String.class.getDeclaredField("value"); //改变value属性访问权限...②保证类不会被扩展。 ③使所有的域都是final。 ④使所有的域都成为私有的。 ⑤确保 对于任何可变组件互斥访问。...不可变对象可以只有一种状态,即被创建时状态。 ②不可变对象本质上是线程安全,它们不要求同步。当多个线程并发访问这样对象时,它们不会遭到破坏。

    63530

    如何编写可怕Java代码?

    对一切使用异常 你知道循环对?...在 Java 中没有什么是真正 final 一些开发人员认为他们通过将 final 关键字放在变量前面来以说明不会去更改这个。...事实是——有时候你真的想要改变一个 final 字段,所以这是如何做: public static void notSoFinal() throws NoSuchFieldException, IllegalAccessException...如果你在类中设置了 final ,那么它将不起作用。(可能是一些编译级别的优化破坏了所有的乐趣) 使用 Java 序列化,干就对了 这很简单,用 Java 序列化,玩得开心,好好享受。...考虑到这一点,请确保不要学习: 新类库 新语言 新框架 这样可以节省你时间!你永远都不应学习任何新知识,因为你已经是最好了。 你有能力去做这件事,并不代表你应该

    94820

    如何编写可怕 Java 代码?

    让我们看看如何使用 Java 异常处理来解决该问题,而不用担心这些讨厌差一错误! 不用担心访问修饰符 你说什么?Java 中访问修饰符,这不是浪费时间嘛!...在 Java 中没有什么是真正 final 一些开发人员认为他们通过将 final 关键字放在变量前面来以说明不会去更改这个。推荐:为什么要加 final 关键字了?...事实是——有时候你真的想要改变一个 final 字段,所以这是如何做: 注意,在构造函数中提供最终值时,这对很有用。如果你在类中设置了 final ,那么它将不起作用。...(可能是一些编译级别的优化破坏了所有的乐趣)关注微信公众号:Java技术栈,在后台回复:java,可以获取整理 N 篇最新Java教程,都是干货。...永远不要编写测试,只是不要编写错误! 将所有都定义为 public -方便访问! 支持全局变量–您可能需要它们! 大型接口优于小型专用接口–可以使用方法越多越好!

    1K10

    如何编写可怕 Java 代码?

    在 Java 中没有什么是真正 final 一些开发人员认为他们通过将 final 关键字放在变量前面来以说明不会去更改这个。...事实是——有时候你真的想要改变一个 final 字段,所以这是如何做: public static void notSoFinal() throws NoSuchFieldException, IllegalAccessException...如果你在类中设置了 final ,那么它将不起作用。(可能是一些编译级别的优化破坏了所有的乐趣) 4. 使用 Java 序列化,干就对 这很简单,用 Java 序列化,玩得开心,好好享受。...永远不要编写测试,只是不要编写错误! 将所有都定义为 public -方便访问! 支持全局变量–您可能需要它们! 大型接口优于小型专用接口–可以使用方法越多越好!...你永远都不应学习任何新知识,因为你已经是最好了。 你有能力去做这件事,并不代表你应该做 ---- ---- 生活很美好,明天见(。・ω・。)ノ♡

    92220

    教你如何在 React 中逃离闭包陷阱 ...

    一个常见问题 比如现在有这样一个场景:你正在实现一个带有几个输入字段表单。其中一个字段是来自某个外部组件库。你无法访问内部结构,所以也没办法解决它性能问题。...第二次调用也是同样情况:我们传递了一个不同,形成一个闭包,返回函数也将永远可以访问该变量。...我们在 onClick 中从未更新过,你能告诉为什么? 当然,这又是一个过期闭包。当我们创建 onClick 时,首先使用默认状态(undefined)形成闭包。...我们将该闭包与 title 属性一起传递给我们 Memo 组件。在比较函数中,我们只比较了标题。它永远不会改变,它只是一个字符串。...}, []); 注意到 ref 并不在 useCallback 依赖关系中?ref 本身是不会改变。它只是 useRef 钩子返回一个可变对象引用。

    59240

    Unity基础教程系列(七)——可配置形状(Variety of Randomness)

    而且,这种关系在构造后不会持续,所以如果区域恰好移动,方向也不会改变。 ? ? 3.3 随机运动 让我们也支持随机方向,这就是我们开始方式。将随机添加到枚举。 ?...位置不应该命名为area,rect或类似名称? 那会更有意义,因为它实际上描述是矩形UI区域,而不仅仅是位置。但是Unity一直使用Position,因此也会这样做。 ? ?...这样可以防止它变成蓝色,并在你使用Tab键在编辑中逐步浏览UI控件时可以将其跳过。 ? ? (现在只会高亮选中框了) 最后,完成后,我们应该将缩进级别和标签宽度恢复为其原始。...这本身并不会改变浮动范围绘制方式,因为我们所做只是将一些元数据附加到字段定义中。...为此,请从浮动字段宽度中减去四个像素,然后移动水平位置进行补偿。 ? ? (更好布局) 最后,我们强制要求直接输入字段不能超出限制,并且max永远不会小于min。 ? 下一个章节,更多工厂。

    2.7K30

    翻译连载 |《你不知道JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 6 章:不可变性

    使用我们在第 5 章讨论副作用相关概念来分析 addValue(..)。它是纯?它是否具有引用透明性?给定相同数组作为输入,它会永远返回相同输出?它无副作用?答案是肯定。...读者可能会(错误地)认为,这里使用 const 用意是你永远不会修改这个数组 —— 这样推断对来说合情合理。...因为他们猜测你之前使用 const 目的就是“这个变量不会改变”。 认为你应该使用 var 或 let 来声明那些你会去改变变量,它们确实相比 const 来说是一个更明确信号。...const 所带来问题还没讲完。还记得我们在本章开头所说不可变性是指当需要改变某个数据时,我们不应该直接改变它,而是应该使用一个全新数据。那么当新数组创建出来后,你会怎么处理它?...对来说,这才是 const 所擅长。坦白讲,在编码时并不会使用很多这样声明。

    1.2K50

    关键字volatile正确理解和使用

    “i副本”,导致dosomething永远不会被调用。...如果将变量加上volatile修饰,则编译保证对此变量读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。...问题: 一个参数既可以是const还可以是volatile?可以,例如只读状态寄存。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。...当变量在因别的线程等而改变,该寄存不会相应改变,从而造成应用程序读取和实际变量值不一致。...当该寄存在因别的线程等而改变,原变量不会改变,从而造成应用程序读取和实际变量值不一致。 volatile应该解释为“直接存取原始内存地址”比较合适,“易变”这种解释简直有点误导人。

    61030

    Go语言核心36讲(Go语言进阶技术三)--学习笔记

    3: 3, } 这里变量badMap2类型是键类型为interface{}、类型为int字典类型。这样声明并不会引起什么错误。或者说,通过这样声明躲过了 Go 语言编译检查。...这样键值也不会让 Go 语言编译报错,因为从语法上说,这样做是可以。...不建议你使用这些高级数据类型作为字典键类型,不仅仅是因为对它们求哈希,以及判等速度较慢,更是因为在它们中存在变数。...比如,对一个数组来说,可以任意改变其中元素,但在变化前后,它却代表了两个不同键值。 对于结构体类型情况可能会好一些,因为如果可以控制其中各字段访问权限的话,就可以阻止外界修改它了。...这里安全是指,该不会因这些操作而产生混乱,或其它不可预知问题。 具体思考题是:字典类型是并发安全?如果不是,那么在我们只在字典上添加或删除键 - 元素对情况下,依然不安全

    74401

    java面向对象相关知识

    再复杂系统都可以为用户提供一个简单门面 如何通过反射获取和设置对象私有字段?...可以通过类对象getDeclaredField()方法字段(Field)对象,然后再通过字段对象setAccessible(true)将其设置为可以访问,接下来就可以通过get/set方法来获取/设置字段值了...内部类可以引用他包含类成员,如果可以,有没有什么限制? 一个内部类对象可以访问创建它外部类对象内容,内部类如果不是static,那么它可以访问创建它外部类对象所有属性内部类。...一个对象被当作参数传递给一个方法后,此方法可改变这个对象属性,并可返回变化后结果,那么这里到底是传递还是引用传递? 是传递(这里说是引用)。Java 编程语言只有传递参数。...当一个对象实例作为一个参数被传递到方法中时,参数就是对该对象引用。对象内容可以在被调用方法中改变,但对象引用是永远不会改变

    56510

    【Rust 研学】Rust Nation UK 2024 | Rust ABI 稳定之路

    本系列为学习 Rust Nation UK 2024 大会笔记,不会是所有演讲,只拣一些感兴趣内容。...我们知道稳定 ABI 一个 “niche” 点是内存布局永远不会改变,即,它是被“冻结”。这允许编译和工具在处理类型实例时做出一些优化,因为它们可以依赖于该类型布局稳定性。...如果编译知道一个类型内存布局不会改变,那么在执行某些操作时,就不需要通过类型描述符来间接访问这个类型实例。这样可以直接操作内存,减少了函数调用(如memcpy)需要。...内联这样函数可能导致编译生成非常大代码,这可能会适得其反,影响程序性能和缓存利用效率。 稳定 ABI 会承诺内联函数也永远不会改变。...为了避免意外依赖于非ABI稳定接口,Rust要求使用#[inline(export)]标记函数只能访问公开字段或用#[abi_stable]标记私有字段

    35210

    【C语言笔记】volatile关键字

    volatile作用 volatile作用是作为指令关键字,确保本条指令不会因编译优化而省略,且要求每次直接读。 简单地说就是防止编译对代码进行优化。...到该寄存中,以便保持一致 当变量在因别的线程等而改变,该寄存不会相应改变,从而造成应用程序读取和实际变量值不一致; 当该寄存在因别的线程等而改变,原变量不会改变,从而造成应用程序读取和实际变量值不一致...一个例子是只读状态寄存。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2)是的。尽管这并不很常见。...“i副本”,导致dosomething永远不会被调用。...如果将变量加上volatile修饰,则编译保证对此变量读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。

    75860

    学习 React Hooks 可能会遇到五个灵魂问题

    ---- 正文 从 React Hooks 正式发布到现在,一直在项目使用它。但是,在使用 Hooks 过程中,也进入了一些误区,导致写出来代码隐藏 bug 并且难以维护。...} 虽然 useEffect 回调函数依赖了 id 和 refresh 方法,但是观察 refresh 方法可以发现,它在首次 render 被创建之后,永远不会发生改变了。...values 状态,这时 callback 不再依赖于外部 values 变量了,因此依赖数组中不需要指定任何 })); }, []); // 这个 callback 永远不会重新创建...因此,在使用 useMemo 之前,我们不妨先问自己几个问题: 要记住函数开销很大? 返回是原始? 记忆会被其他 Hook 或者子组件用到?...但是 increase 被重新创建之后, useEffect 并不会再次执行,所以 useEffect 中取到 increase 永远都是首次创建时 increase 。

    2.4K51

    关于Java持久化相关资源汇集:Java Persistence API

    总的来说,认为对于非复合主键,允许null作为合法容易产生混淆,因此倾向于使用long,而不是Long。...因此,即使将字段设置为惰性,也可能会加载不必要数据。将来规范会不会将其修改为必须与fecth类型一致?这会涉及到什么问题? 回答:通常,OpenJPA永远不会忽略用户配置FetchMode。...这是提示而不是规则,因为惰性加载实际上是调优过程中一项关注事项,永远都不应该对应用程序产生行为性影响*。...问题:使用乐观锁定时,@Version注释仅支持int字段,它可以是datetime?...问题:如果抛出乐观锁定异常,可以了解哪些列发生冲突 回答:不可以。您可以了解哪些实例失败,但不是字段。给定失败实例,很容易从数据库中加载新,并进行比较。

    2.5K30

    volatile在嵌入式系统中用法

    一个例子是只读状态寄存。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2). 是的。尽管这并不很常见。...,会同时把变量copy到该寄存中,以便保持一致 当变量在因别的线程等而改变,该寄存不会相应改变,从而造成应用程序读取和实际变量值不一致 当该寄存在因别的线程等而改变...,原变量不会改变,从而造成应用程序读取和实际变量值不一致 举一个不太准确例子: 发薪资时,会计每次都把员工叫来登记他们银行卡号;一次会计为了省事,没有即时登记,用了以前登记银行卡号...“i副本”,导致dosomething永远不会被 调用。...如果将将变量加上volatile修饰,则编译保证对此变量读写操作都不会被优化(肯定执行)。此例中i也应该如此说明。

    1.6K20

    Ask Apple 2022 与 SwiftUI 有关问答(上)

    是否可以在纯 SwiftUI 中完成( 不使用 UIKit )?给我一些方向来完成它?A:一般来说,建议使用 .safeAreaInset(edge: .bottom) 来实现底部文本字段。...在 ContentView 中使用了 enviromentObject 作为所有视图封装,在每个视图中,使用 @EnviromentObject 来访问这些数据,对于这种情况,这是最好方法?...使用它们应该只创建一个实例,然后可以在子视图中读取。这应该不会增加内存使用( 如果有的话,请提出反馈 )。如果你向你模型对象追加越来越多数据,你可能会增加内存使用,这是很正常。...下划线会让它看起来有点诡异,但访问底层存储并没有错。官方文档主要试图指出人们最常见用法,这样他们就不会一开始就试图直接初始化他们属性包装。...从父视图通过环境进行传递应该可以满足提问者当前需求:父视图可以传入新,当前视图也可以在视图范围内改变。总结忽略掉了没有获得结论问题。希望上述整理能够对你有所帮助。

    12.2K20

    10:理解 volatile 关键字(去除 Release 版本反向优化)

    也就是说,编译在 Release 模式下会对字段访问进行优化,它假定字段都是由单个线程访问,把与该字段相关表达式运算结果编译成常量缓存起来,避免每次访问都重复运算。...但这样就可能导致其它线程修改了字段而当前线程却读取不到最新字段。为了防止编译这么做,你就要让编译器用多线程思维去解读代码。告诉编译字段可能会被其它线程修改,这种情况不要使用优化策略。...而要做到这一点,就需要使用 volatile 关键字。 给类字段添加 volatile 关键字,目的是告诉编译字段可能会被多个独立线程改变,不要对该字段访问进行优化。...使用 volatile 可以确保字段是可用最新,而且该不会像非 volatile 字段那样受到缓存影响。..._shouldStop 最新,也就永远不会终止 while 循环。

    25120
    领券