簡體   English   中英

我可以使用 .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?

簡短的回答: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM