作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下方法:
protected <T> Func1<ApiResponse<T>, Observable<T>> checkApiSuccess() {
return new Func1<ApiResponse<T>, Observable<T>>() {
@Override
public Observable<T> call(ApiResponse<T> response) {
if (response.isSuccess()) {
return Observable.from(response.getResult());
}
return Observable.error(new ApiException(response.getError()));
}
};
}
为什么这有效:
Func1<ApiResponse<LoginResult>, Observable<LoginResult>>
checkApiSuccessFunc = checkApiSuccess();
return apiService
.login(params)
.flatMap(checkApiSuccessFunc);
但这不是:
return apiService
.login(params)
.flatMap(checkApiSuccess());
我收到编译时错误 no suitable method found for flatMap(Func1<ApiResponse<Object>>, Observable<Object>)
。不知何故,当直接使用该方法时,类型 T 无法再映射到 LoginResult。
最佳答案
类型推断可能无法确定 T
应该是 LoginResult
。它可以与 Java 8 一起使用,其中类型推断系统已得到改进。
您可以尝试使用目标类型来帮助编译器:
flatMap(this.<LoginResult> checkApiSuccess())
关于Java 7 泛型类型推断失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861527/
我是一名优秀的程序员,十分优秀!