gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:12:07 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com