如何参数化这些方法?

时间:2018-02-27 10:17:42

标签: android class arraylist parameters

我有下一段代码:

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。

谢谢。

4 个答案:

答案 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;
}