今天使用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, ...)
现在看来只需要这样调用就好了,传一个参再来强制转型。(虽然这样做并不知道除了好看有什么用,求解)