[英]casting 'findViewByld(...)' to 'EditText' is redundant
[英]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.