Java泛型子类继承调用

来源:互联网 发布:java微信开发框架搭建 编辑:程序博客网 时间:2024/05/29 13:56

假设有这么一个需求:在一个函数中传入一个对象,并给出这个对象的类及其一个子类,如果这个对象是其子类的实例,那么就执行子类的方法,如果不能强转那么就执行这个父类本身的方法。或者这样的需求:还是给出一个对象,但是给出类及其子类,要求为了代码可读性将子类方法和父类方法分开写。下面是一个泛型写法。以imageView及其父类View为例。首先是几个接口

interface CallbackHaha<E extends T,T> {public T parentMethod(T t);//如果传入一个父类,如果强转成功,则既执行子类代码,又执行父类代码,如果强转失败,则只执行父类代码public E childMethod(E e);//如果传入一个子类,则既执行子类代码,又执行父类代码}public <T, E extends T> void childCall(E e,CallbackHaha<E,T> callbackHaha){T t=callbackHaha.parentMethod(e);//执行父类的方法(用于代码分离)e=callbackHaha.childMethod(e);//执行子类特有的方法}public <T, E extends T> void parentCall(T t,CallbackHaha<E,T> callbackHaha){try {E e = (E)t;//把父类强转成其子类e=(E) callbackHaha.childMethod(e);//如果强转成功} catch (ClassCastException e) {//如果强转失败// TODO: handle exceptiont=callbackHaha.parentMethod(t);}}

调用方法

ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);//传入一个子类进行处理childCall(imageView1, new CallbackHaha<ImageView,View>() {@Overridepublic ImageView childMethod(ImageView e) {// TODO Auto-generated method stub//传入子类自身的处理e.setImageResource(R.drawable.btn_gengduo_nor);return e;}@Overridepublic android.view.View parentMethod(android.view.View t) {// TODO Auto-generated method stub//把这个子类强转成其父类进行处理(虽然方法多余,但是代码分离的效果也是极好的)t.setVisibility(View.VISIBLE);return null;}});//传入一个父类,并试着强转成其某一个子类,并对子类进行处理parentCall(imageView1, new CallbackHaha<ImageView,View>() {@Overridepublic ImageView childMethod(ImageView e) {//如果强转成功// TODO Auto-generated method stube.setImageResource(R.drawable.btn_gengduo_select);return e;}@Overridepublic View parentMethod(View t) {//如果强转失败// TODO Auto-generated method stubt.setVisibility(View.GONE);return t;}});}

0 0
原创粉丝点击