[英]Why Class.getClass() can be different from Class.cast() return type?
[英]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?
簡短的回答: sourceObject.getClass() == JComboBox.class
是正確的。
someObj.getClass()
的結果是代表 someObj 類的Class
對象。
而SomeClass.class
也是代表類SomeClass
的對應對象。
所以SomeClass.class.getClass()
返回代表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
。
情況 1 :- 如果 (sourceObject.getClass() == JComboBox.class) 是正確的比較方式,因為 getClass() 將返回 sourceObject 對象的運行時類,而 JComboBox.class 也將返回類
情況 2:- sourceObject.getClass() == JComboBox.class.getClass() 它會拋出不兼容的 op-rend 類型異常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.