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

Can I use .getClass() == .class or .getClass() == .class.getClass()?

我正在测试 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?

案例 1:- 如果 (sourceObject.getClass() == JComboBox.class) 是正确的比较方式,因为 getClass() 将 return sourceObject 对象的运行时 class 而 JComboBox.class 将 return class 太

案例 2:- sourceObject.getClass() == JComboBox.class.getClass() 它将抛出不兼容的 op-rend 类型异常

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

someObj.getClass() 的结果是 Class 对象,表示 class 的 someObj。
SomeClass.class也是代表classSomeClass.
对应的对象 所以SomeClass.class.getClass()returns代表SomeClass.class

对象class的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());

如果您只关心转换为 JComboBox 是否有效,则使用:

if (sourceObject instanceof JComboBox) {

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