我可以使用.getClass()== .class或.getClass()== .class.getClass()吗?

时间:2019-12-31 02:38:04

标签: java class equals

我正在测试Object是否等于特定的class类型。 例如:

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        Object sourceObject = e.getSource();

        if (sourceObject.getClass() == JComboBox.class.getClass()) {
            @SuppressWarnings("unchecked")
            JComboBox<String> jComboBox = (JComboBox<String>) sourceObject;

那么,我应该使用哪种比较方法? sourceObject.getClass() == JComboBox.class.getClass()还是sourceObject.getClass() == JComboBox.class

还是直接使用instanceof进行比较,是否可以将e.getSource()安全地投射到JComboBox?

3 个答案:

答案 0 :(得分:1)

简短的回答:sourceObject.getClass() == JComboBox.class是正确的。

someObj.getClass()的结果是Class对象,它代表someObj的类。
并且SomeClass.class也是代表类SomeClass的相应对象。
因此SomeClass.class.getClass()返回代表对象Class

的类的SomeClass.class对象

此代码输出true

Date d = new Date();
System.out.println(d.getClass() == Date.class);

这会导致编译错误。

Date d = new Date();
System.out.println(d.getClass() == Date.class.getClass());

答案 1 :(得分:1)

如果您只关心对JComboBox的强制转换是否有效,请使用:

if (sourceObject instanceof JComboBox) {

那样,JComboBox的任何潜在子类也将由您的代码处理,这很可能会发生,因为JComboBox 的子类是 {{ 1}}。

答案 2 :(得分:-1)

情况1:- 如果(sourceObject.getClass()== JComboBox.class)是正确的比较方式,因为getClass()将返回sourceObject对象的运行时类,而JComboBox.class也将返回类

情况2:- sourceObject.getClass()== JComboBox.class.getClass()它将抛出不兼容的op-rend类型Exception