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

问题描述 投票:-1回答:3

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

java class equals
3个回答
1
投票

我将使用Class.isAssignableFrom(Class<?>),因为如链接的Javadoc所述,此方法测试是否可以通过标识转换将指定的Class.isAssignableFrom(Class<?>)参数表示的类型转换为此Class对象表示的类型,或者通过扩大参考转换。喜欢

Class

1
投票

简短的答案:if (JComboBox.class.isAssignableFrom(sourceObject.getClass())) { @SuppressWarnings("unchecked") JComboBox<String> jComboBox = (JComboBox<String>) sourceObject; } 是正确的。

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

此代码输出SomeClass.class

true

虽然这会导致编译错误。

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.