我正在测试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?
我将使用Class.isAssignableFrom(Class<?>)
,因为如链接的Javadoc所述,此方法测试是否可以通过标识转换将指定的Class.isAssignableFrom(Class<?>)
参数表示的类型转换为此Class
对象表示的类型,或者通过扩大参考转换。喜欢
Class
简短的答案: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);
案例1:-如果(sourceObject.getClass()== JComboBox.class)是正确的比较方式,因为getClass()将返回sourceObject对象的运行时类,而JComboBox.class也将返回类]