我可以使用 .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
.
我正在测试 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
对象
这段代码输出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
.