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