簡體   English   中英

為什么投射對象是多余的

[英]Why casting the object is redundant

我有兩個可擴展列表的構造函數,如下所示,我也有一個接口如下所示。 現在我想為兩個不同的活動使用相同的expandlist適配器,這就是我創建兩個構造函數的原因。 但問題是當初始化構造函數時,正如你在第一個構造函數中看到的那樣,當我將接口對象初始化為構造函數中的第二個參數時,我會收到“Redundant casting”,而在第二個構造函數中,必須初始化接口對象應該實現該接口的活動的第二個參數

請解釋為什么第一個構造函數中的鑄件是第二個,而第二個中的鑄件是第二個?

更新

both activities extends AppCompatActivity

*代碼

public MyExpandableList(Context ctx, ActMain actMain, ArrayList<Group> groupList) {
    this.mCtx = ctx;
    this.mGroupList = groupList;
    this.mBTUtils = new BTUtils(ctx);
    this.mDevDetailsObserver =  (IDeviceDetailsPasser) actMain;//redundant casting, which is not necessary
}

public MyExpandableList(Context ctx, ActConnect actConnect, ArrayList<Group> groupList) {
    this.mCtx = ctx;
    this.mGroupList = groupList;
    this.mBTUtils = new BTUtils(ctx);
    this.mDevDetailsObserver = (IDeviceDetailsPasser) actConnect;//manadory casting

}

//interface
public interface IDeviceDetailsPasser {
public void onDevicedetailsChosen(Header header, Details details, int groupPos);

}

似乎ActMain已經實現了IDeviceDetailsPasser ,這就是為什么冗余的轉換。

我認為在這種情況下,您的actMain實現了IDeviceDetailsPasser ,因此轉換是多余的,而您的actConnect不實現IDeviceDetailsPasser ,因此強制轉換。

編輯 :要處理ClassCastException,請使用try/catch

    try {
        mDevDetailsObserver = (IDeviceDetailsPasser) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement IDeviceDetailsPasser");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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