我有下一段代码:
private boolean isResponseHasData(Response<ArrayList<PrefixPhoneModel>> response){
return (response != null
&& response.body() != null
&& response.body().size() > 0
&& !response.body().isEmpty());
}
private boolean isResponseHasErrorBody(Response<ArrayList<PrefixPhoneModel>> response){
return response != null && response.errorBody() != null;
}
private boolean isNoMoreDataToReturn(Response<ArrayList<PrefixPhoneModel>> response){
return response != null && response.code() != 500;
}
private boolean isPreviousCallsWereSuccessful(){
return getPrefixPhoneModels() != null && !getPrefixPhoneModels().isEmpty();
}
我需要将这些方法与其他参数一起使用。现在,我有一个ArrayList,但我需要使用更多类型的ArrayLists,ArrayList,ArrayList ......等。响应是一样的,但param会改变。
如何更改此方法以接受任何ArrayList。
谢谢。
答案 0 :(得分:1)
使用通用通配符?
:
private boolean isResponseHasErrorBody(Response<ArrayList<?>> response){
...
}
或者,如果您想要特定的类继承,请使用? extends [Some type here without brackets]
。
如果您想要List类的任何子级,只需将Response<ArrayList<?>>
替换为Response<List<?>>
,或者使用Response<Collection<?>>
。
或者,由于嵌套列表的类型无关紧要,您可以使用Response<List>
或Response<Collection>
。在嵌套列表中使用通用通配符似乎无法正常工作
答案 1 :(得分:1)
这样的事情应该可以胜任:
public <E, L extends Collection<E>> boolean isResponseHasData(Response<L> response);
或
public <L extends Collection<?>> boolean isResponseHasData(Response<L> response);
或只是
public boolean isResponseHasData(Response<? extends Collection<?>> response);
如果你需要在类型上设置边界,第一个很酷:<E extends MyObject, ... >
答案 2 :(得分:0)
也许您需要将这些方法移到另一个类
class ResponseValidator<T> {
private boolean isResponseHasData(Response<ArrayList<T>> response){
return (response != null
&& response.body() != null
&& response.body().size() > 0
&& !response.body().isEmpty());
}
private boolean isResponseHasErrorBody(Response<ArrayList<T>> response){
return response != null && response.errorBody() != null;
}
private boolean isNoMoreDataToReturn(Response<ArrayList<T>> response){
return response != null && response.code() != 500;
}
private boolean isPreviousCallsWereSuccessful(){
return getPrefixPhoneModels() != null && !getPrefixPhoneModels().isEmpty();
}
}
用法:
ResponseValidator<PrefixPhoneModel> responseValidator = new ResponseValidator<>();
responseValidator.isResponseHasErrorBody(response);
答案 3 :(得分:-1)
您可以简单地省略类型参数并使用
等方法private boolean isResponseHasErrorBody(Response response){
return response != null && response.errorBody() != null;
}
你可能会像未经检查的演员一样发出警告。您可以使用@SuppressWarnings("unchecked")
注释
或者你可以参数化像
这样的方法private <T extends ArrayList> boolean isResponseHasErrorBody(Response<T> response){
return response != null && response.errorBody() != null;
}