今天使用github上Yalantis的Context-menu的庫時,想到自己要在多個fragment里使用,于是就封裝了一下,用一個類來實現其中的OnMenuItemClickListener(處理每個item點擊事件的回調),但是卻發現Log日志中拋出了ClassCast的異常:
MainActivity should implements OnMenuItemClickListener
當時整個人都不好了,因為從沒遇到這種問題,原來一直以為什么類都可以去實現,難道在android中還有特殊的類必須要由activity來實現?是因為我對java的繼承實現機制理解不夠?
后來當我查看源代碼時才發現,這個異常是作者寫的,這個OnMenuItemClickListener會在一個ContextMenuDialogFragment里與活動綁定是調用
public void onAttach(Activity activity) {
? ? super.onAttach(activity);
? ? try {
? ? ? ? mItemClickListener = (OnMenuItemClickListener) activity;
? ? } catch (ClassCastException e) {
? ? ? ? Log.e(TAG, activity.getClass().getSimpleName() +
? ? ? ? should implement " + OnMenuItemClickListener.class.getSimpleName());
}
我靠!>==< 還可以這樣!!!
不過我get了新知識,原來也有一次我一個類繼承了另外兩個類,而我在某個地方需要同時用到這
兩個類的實例,當時的做法是在傳參是 : method(this, this, ...)
現在看來只需要這樣調用就好了,傳一個參再來強制轉型。(雖然這樣做并不知道除了好看有什么用,求解)