java - 是否有理由在忽略返回值的情况下调用 obj.getClass() ?

标签 java class oop

我正在审查一些代码。该代码内部有一个事件监听器的构造函数,类似于以下代码:

public class MyClass implements ActionListener {
  SomeOtherClass m_oc;

  public MyClass(SomeOtherClass oc) {
    if (null == oc) {
      throw new IllegalArgumentException("oc cannot be null");
    }
    m_oc = oc;
    m_oc.getClass();
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    do_stuff();
  }

  private void do_stuff() {
    /* some more code here, but this code never uses m_oc */
  }
}

现在,我的问题是:为什么编写这段代码的人会调用 m_oc.getClass()

该对象 (m_oc) 是 SomeOtherClass 的实例,除了构造函数中的该位置之外,代码中的任何位置都不会使用该对象。

最佳答案

不,没有理由这样做。 getClass 方法是非虚拟的,没有副作用。因此,该声明本身不可能产生任何效果。此外,已经对指定引用的 null 进行了显式检查,因此此调用不会引发 NullPointerException

有些人喜欢使用 getClass 作为“快速”或“简洁”null-check因为 JIT 处理此方法的方式。这是not longer true for modern VMs并且没有适本地暴露你的意图。另外,getClassstrange side-effects for C2 compilation 。我希望这是不完整重构的结果。也许您的版本历史记录揭示了此声明的起源。

关于java - 是否有理由在忽略返回值的情况下调用 obj.getClass() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297002/

相关文章:

java - 有没有办法避免多次配置相同的信息?

java - Hibernate + spring获取最新的lazy 1 to N属性值

java - 清除关联子项列表后的 session 更新不会删除它们

java - 通过WIFI高速传输文件

ES6 中的 Javascript 类,如何将它们导入到其他 js 文件和 html 文件中?

c++ - 如何在远程类之间共享数据?

c++ - 私有(private)继承和组合,哪个最好,为什么?

language-agnostic - 面向对象风格的编程,用于对象之间的交互

objective-c - iOS : is there a way to use a single class to hold common variables and not break Object Oriented principles?

c++ - 如何在运行时创建和命名对象?