использование универсального типа в статическом классе универсального класса - PullRequest
0 голосов
/ 17 ноября 2018

В спокойном проекте я пытаюсь использовать общий ответ. В этом общем ответе есть статический responseBuilder. Но метод сборки в responseBuilder не может принимать универсальный тип. Код:

public class RestResponse<T>{

private int status;

private String message;

private T entity;

/**
 * 
 */
public static class RestResponseBuilder {

    private final RestResponse restResponse;

    public RestResponseBuilder(RestResponse resp) {
        this.restResponse = resp;
    }

    public static RestResponseBuilder ok() {

        return status(HttpServletResponse.SC_OK).msg("ok");
    }

    public static RestResponseBuilder status(int status) {
        final RestResponse resp = new RestResponse();
        resp.setStatus(status);

        return new RestResponseBuilder(resp);
    }

    public RestResponseBuilder msg(String msg) {
        this.restResponse.setMessage(msg);
        return this;
    }

    public RestResponseBuilder entity(Object entity) {
        this.restResponse.setEntity(entity);
        return this;
    }

    public RestResponse build() {

        return restResponse;
    }
}

}

Когда я использую вот так: RestResponseBuilder.ok () объект (нуль) .build (). Есть предупреждение: Тип безопасности: выражение типа RestResponse нуждается в непроверенном преобразовании, чтобы соответствовать

У меня вопрос, как я могу добавить универсальный тип в RestResponseBuilder, чтобы избежать этого предупреждения? Спасибо

1 Ответ

0 голосов
/ 17 ноября 2018

Не используйте сырые типы. Сделайте ваш класс компоновщика тоже универсальным, а его статические методы тоже универсальными:

public class RestResponse<T> {

    private int status;

    private String message;

    private T entity;

    /**
     *
     */
    public static class RestResponseBuilder<T> {

        private final RestResponse<T> restResponse;

        public RestResponseBuilder(RestResponse<T> resp) {
            this.restResponse = resp;
        }

        public static <T> RestResponseBuilder<T> ok() {

            return RestResponseBuilder.<T>status(200).msg("ok");
        }

        public static <T> RestResponseBuilder<T> status(int status) {
            final RestResponse<T> resp = new RestResponse<T>();
            resp.status = status;

            return new RestResponseBuilder<T>(resp);
        }

        public RestResponseBuilder<T> msg(String msg) {
            this.restResponse.message = msg;
            return this;
        }

        public RestResponseBuilder<T> entity(T entity) {
            this.restResponse.entity = entity;
            return this;
        }

        public RestResponse<T> build() {

            return restResponse;
        }
    }

}
...