是否有理由在忽略返回值的同时调用obj.getClass()?

heb*_*bbo 2 java oop class

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

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 */
  }
}
Run Code Online (Sandbox Code Playgroud)

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

除了构造函数中的该位置之外m_oc,该对象()SomeOtherClass不是代码中的任何位置.

Raf*_*ter 5

不,没有理由这样做.该getClass方法是非虚拟的,没有副作用.因此,这种说法本身无法产生任何影响.此外,已经明确检查null了分配的引用,因此该调用不能激发a NullPointerException.

有些人喜欢使用getClass"快速"或"简洁"的无效检查,因为JIT处理这种方法的方式.对于现代VM而言,这不再适用,并且不会恰当地暴露您的意图.此外,C2编译getClass奇怪的副作用.我希望这是不完整重构的结果.也许你的版本历史揭示了这个陈述的起源.