假设有这么一个需求:在一个函数中传入一个对象,并给出这个对象的类及其一个子类,如果这个对象是其子类的实例,那么就执行子类的方法,如果不能强转那么就执行这个父类本身的方法。或者这样的需求:还是给出一个对象,但是给出类及其子类,要求为了代码可读性将子类方法和父类方法分开写。下面是一个泛型写法。以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 exception
t=callback