局部变量赋值以避免多次强制转换

2024-03-23

最近有一个问题询问在 Java 中将调用 getter 的结果分配给局部变量以避免多次调用同一访问器是否是一个好主意。我找不到原始帖子,但共识似乎是这通常是不必要的,因为 Hotspot 无论如何都会优化方法调用开销。

然而,对于采用这种技术来避免多次转换有何看法?目前我面临着以下选择:

if (a instanceof Foo) {
  // Cast once and assign to local variable.
  Foo foo = (Foo)a;

  if (foo.getB() == 1 && foo.getC() == 2) {
    ...
  }
}

OR

if (a instanceof Foo) {
  // Cast twice making code compact but possibly less readable.
  // Also, is there an overhead in multiple casts?
  if (((Foo)a).getB() == 1 && ((Foo)a).getC() == 2) {
    ...
  }
}

由于可读性问题,我更喜欢创建局部变量而不是总是进行强制转换。对于我(或处理相同代码的其他开发人员)来说,代码可读性是一个重要问题。

在我看来,对现阶段性能的担忧是“过早优化”模式的一个例子。

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

局部变量赋值以避免多次强制转换 的相关文章

  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • 如何自定义BlockingQueue的阻塞行为

    我想创建一个阻塞队列 它根据自定义规则而不是队列中的项目数量来阻止生产者 例如 生产者生成一些文件并放入队列中 消费者经过一番分析后将它们转移到特定位置 对于上述场景 如果队列中的总文件大小达到某个阈值 我希望生产者等待生成新文件 如果总大
  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • 使用 Java 编程式 HTML 文档生成

    有谁知道如何在 Java 中以编程方式生成 HTMLDocument 对象 而不需要在外部生成字符串 然后使用 HTMLEditorKit read 来解析它 我问的两个原因 首先 我的 HTML 生成例程需要非常快 并且我认为将字符串解析
  • Maven + Cobertura:无法找到[您的班级]。你指定了源目录吗?

    我有 MyMath 类 有两个简单的方法 multi 和 add 和测试类只会测试多种方法 public class MainTest Test public void testMultiply MyMath tester new MyMa
  • java“void”和“非void”构造函数

    我用 java 编写了这个简单的类 只是为了测试它的一些功能 public class class1 public static Integer value 0 public class1 da public int da class1 v
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • 如何模拟一个方面

    我目前正在使用aspectj 开发一些监控工具 因为这个工具应该是技术独立的 尽可能 所以我没有使用 Spring 进行注入 但我希望我的方面能够经过单元测试 方面示例 Aspect public class ClassLoadAspect
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 源服务器未找到目标资源的当前表示或不愿意透露该表示存在

    web xml
  • .class 与 .java

    class 文件和 java 文件有什么区别 我正在尝试让我的小程序工作 但目前我只能在 Eclipse 中运行它 还不能嵌入 HTML 谢谢 编辑 那么如何使用 JVM 进行编译呢 class 文件是编译后的 java 文件 java 都
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 哪种 Java DOM 包装器是最好或最受欢迎的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • Android同步onSensorChanged?

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

    当我有一个界面时 public interface Foo

随机推荐

  • 阻止 iframe 设置parent.location(防止framebusting)

    我在自己的域上有一个网站 其中我将 iframe 包含到其他域上的其他网站以进行快速预览 问题是某些网站具有框架破坏代码 可以将用户从我的网站重定向 我怎样才能阻止这个 在 Framebuster 的情况下 即使根本不显示 iframe 也
  • 在对话框外部按下时如何关闭 DialogFragment?

    我正在使用一个DialogFragment 虽然我已成功设置图像以在按下时关闭 即关闭 对话框 但当用户单击对话框之外的任何位置时 我很难找到关闭对话框的方法 就像它与普通对话框一样 我以为会有某种 dialogFragment setCa
  • 枚举作为 TypeScript 中的参数

    是否可以将参数的类型设置为 Enum 像这样 private getRandomElementOfEnum e enum string var length number Object keys e length return e Math
  • 添加适用于 Firefox Webdriver 但不适用于 PhantomJS 的 Cookie

    我有一个带有饼干的泡菜 是通过以下命令创建的 def doLogin driver do login stuff pickle dump driver get cookies open cookies pkl wb 我有获取 cookie
  • 渲染新行的 HTML 规范?

    我正在尝试将一些简单的 HTML 文档 主要包含 div 和 br 标签 呈现为纯文本 但我在何时添加新行方面遇到了困难 我以为这会很简单 div and br 生成新的线条 但看起来有各种微妙的规则 例如 div one line div
  • 如何将两组 weka 实例合并在一起

    目前 我一次将一个实例从一个数据集复制到另一个数据集 有没有办法做到这一点 使字符串映射保持完整 mergeInstances 水平工作 是否有等效的垂直合并 这是我用来将多个 arff 文件中相同结构的数据集读取到一个大型数据集中的循环的
  • 如何在JPA中定义单向OneToMany关系

    我在 JPA 中的实体映射方面遇到以下问题 我有两个实体 第一个是查找 第二个是代表实体翻译的文本 现在我需要将 Lookup 绑定到 Text 但我不希望 Text 引用 Lookup 为了使事情变得更复杂 文本在这种关系中不使用其主键
  • 将行添加到命名范围

    我在 Google 表格中有一个命名范围 A1 K14 我想做的就是在命名范围的底部添加一个新行 这似乎是一项容易的任务 使用此代码不会扩展命名范围 并且我没有收到错误消息 它确实在命名范围之外插入一个新行 这不是我想要做的 如果我改为in
  • 带有单位编号/子前提的 Google 地方自动完成建议不会出现在响应数组中

    我正在使用 Google Places API 使用 javascript 自动完成地址 当我在输入框中输入地址的单元号和街道号时 它会在建议下拉列表中显示结果 但是当我选择地址时 操作 place changed 事件的侦听器没有任何地址
  • Rails:如何向包含变音符号的收件人发送电子邮件?

    我想发送一封包含以下设置的电子邮件 def registration confirmation user recipients user username lt user email gt from Netzwerk Muensterlan
  • 内连接与何处连接

    两者之间的性能 在 Oracle 中 是否存在差异 Select from Table1 T1 Inner Join Table2 T2 On T1 ID T2 ID And Select from Table1 T1 Table2 T2
  • Hive“ANALYZE TABLE”如何从java执行

    我需要计算配置单元表中的行数 为此 我正在使用查询 ANALYZE TABLE p 7 COMPUTE STATISTICS noscan 我想通过java获取结果 我正在尝试以下操作 代码并没有运气 我得到的错误是 Exception i
  • 如何跳转到一个巨大的文本文件中的特定行?

    下面的代码是否有其他替代方案 startFromLine 141978 or whatever line I need to jump to urlsfile open filename rb 0 linesCounter 1 for li
  • 将键值对文件读入 std::map

    我有一个 Visual Studio 2008 C 03 项目 我想将键值对文件读取到 std map 中 为此 我创建了一个istreambuf pair iterator如下 typedef std map lt std string
  • 求解四变量线性方程

    问题 我需要用 Python 解这些方程 a 3b 2c 2d 1 2a b c 2d 0 3a b 2c d 1 2a c 3d 0 这样我就可以得到a b c和d的值 有没有办法可以用分数来显示它们 My code import num
  • 如何使用版本 Maven 插件更新依赖同级模块的版本

    我在更新依赖同级项目的依赖版本时遇到问题 我的简化项目设置如下 root parent tool core tool functional tests 父项目拥有所有全局属性和依赖管理 功能测试取决于工具 而工具又取决于工具核心 根pom
  • ImageView - 高度与宽度匹配吗?

    我有一个图像视图 我希望它的宽度为 fill parent 我希望它的高度是最终的宽度 例如
  • 来自相机的原始图像数据,如“645 PRO”

    不久前我已经问过这个问题并且我也得到了很好的答案 我一直在这个论坛上上下搜索 但找不到我想要的东西 真的需要 我想从相机获取原始图像数据 至目前为止 我试图从中获取 imageDataSampleBuffer 中的数据 方法 capture
  • 如何编写HQL插入查询?

    我正在努力编写一个 HQL 查询来在表中插入新记录 我已经看到了一些插入查询 如下所示 但我不想从另一个表插入数据 如下代码所示 String hql INSERT INTO Employee firstName lastName sala
  • 局部变量赋值以避免多次强制转换

    最近有一个问题询问在 Java 中将调用 getter 的结果分配给局部变量以避免多次调用同一访问器是否是一个好主意 我找不到原始帖子 但共识似乎是这通常是不必要的 因为 Hotspot 无论如何都会优化方法调用开销 然而 对于采用这种技术