我制作了这个简化的代码示例,但它无法编译:
我想做的是创建一个拦截器,用于拦截回调函数,对响应进行一些操作,然后将其传递给原始回调函数。
我想制作一个通用的拦截器,可以拦截任何类型为“Callback <?extends BaseResponse>”的回调函数。
顺便说一下,NetBeans给出的编译时错误是:
public class Example {
public static void main(String[] args) {
Callback<BalanceResponse> balanceRequestCaller = new Callback<BalanceResponse>() {
@Override
public void onResponse(BalanceResponse response) {}
@Override
public void onFailure(String error, int code) {}
@Override
public void onFailure(Throwable t) {}
};
BalanceRequest breq = new BalanceRequest();
Interceptor interceptor = new Interceptor(balanceRequestCaller);
breq.startRequest((Callback<BaseResponse>) interceptor); //compile-time error!!!
}
public static class Interceptor implements Callback<BaseResponse> {
public Interceptor(Callback<? extends BaseResponse> originalCaller) {
this.originalCaller = originalCaller;
}
private Callback<? extends BaseResponse> originalCaller;
@Override
public void onResponse(BaseResponse response) {
//do some interception stuff
if (response instanceof BalanceResponse) {
((Callback<BalanceResponse>) originalCaller).onResponse((BalanceResponse) response);
} else if (response instanceof SubscriptionResponse) {
((Callback<SubscriptionResponse>) originalCaller).onResponse((SubscriptionResponse) response);
}
}
@Override
public void onFailure(String error, int code) {}
@Override
public void onFailure(Throwable t) {}
}
public interface Request<T extends BaseResponse> {
void startRequest(Callback<T> callback);
}
public static class BalanceRequest implements Request<BalanceResponse> {
@Override
public void startRequest(Callback<BalanceResponse> callback) {}
}
public static class SubscriptionRequest implements Request<SubscriptionResponse> {
@Override
public void startRequest(Callback<SubscriptionResponse> callback) {}
}
public static class BaseResponse {
public String status;
}
public static class BalanceResponse extends BaseResponse {
}
public static class SubscriptionResponse extends BaseResponse {
}
public interface Callback<T> {
void onResponse(T response);
void onFailure(String error, int code);
void onFailure(Throwable t);
}
}
我想做的是创建一个拦截器,用于拦截回调函数,对响应进行一些操作,然后将其传递给原始回调函数。
我想制作一个通用的拦截器,可以拦截任何类型为“Callback <?extends BaseResponse>”的回调函数。
顺便说一下,NetBeans给出的编译时错误是:
incompatible types: Callback<BaseResponse> cannot be converted to Callback<BalanceResponse>
给我一些建议,如何让这个工作起来?