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

时间:2015-10-23 07:30:14

标签: java class oop

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

A = LOAD 'test.csv' USING PigStorage(',');
B = GROUP A by $1;
C = FOREACH B {
      AA = FILTER A by $0 == 'A';
      BB= FILTER A by $0 == 'B';
GENERATE FLATTEN($0), AA,BB;};
dump C;

现在,我的问题是:为什么谁会编写此代码调用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的一个实例,除了构造函数中的该位置之外,不会在代码中的任何位置使用。

2 个答案:

答案 0 :(得分:5)

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

有些人喜欢将getClass用作“快速”或“简洁”null-check,因为JIT对待此方法的方式。这是not longer true for modern VMs,并未正确公开您的意图。此外,getClass还有strange side-effects for C2 compilation。我希望这是不完整重构的结果。也许你的版本历史揭示了这个陈述的起源。

答案 1 :(得分:0)

没有理由在那个地方调用那种方法。这是多余的,因为您只是调用并且没有接收任何输出,或者该方法不会影响对象的状态。

可以删除。