Переопределение обобщенного абстрактного метода `ParamConvertorProvider` - PullRequest
0 голосов
/ 30 декабря 2018

Я предоставляю реализацию ParamConverterProvider в приложении JAX-RS.Эта реализация обеспечивает определение абстрактного метода в интерфейсе с подписью как:

public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation annotations[]);

Я играю с онлайн-учебником и изменил реализацию следующим образом.

package org.koushik.javabrains.rest;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Calendar;

import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import org.koushik.javabrains.rest.MyDate;
@Provider
public class MyDateConverterProvider implements ParamConverterProvider {

    @Override
    public <MyDate> ParamConverter<MyDate> getConverter(final Class<MyDate> rawType, Type genericType, Annotation[] annotations) {

            return new ParamConverter<MyDate>() {

                @Override
                public MyDate fromString(String value) {

                    Calendar requestedDate = Calendar.getInstance();
                    if ("tomorrow".equalsIgnoreCase(value)) {
                        requestedDate.add(Calendar.DATE, 1);
                    }
                    else if ("yesterday".equalsIgnoreCase(value)) {
                        requestedDate.add(Calendar.DATE, -1);
                    }
                    org.koushik.javabrains.rest.MyDate myDate = new org.koushik.javabrains.rest.MyDate();
                    myDate.setDate(requestedDate.get(Calendar.DATE));
                    myDate.setMonth(requestedDate.get(Calendar.MONTH));
                    myDate.setYear(requestedDate.get(Calendar.YEAR));

                    return rawType.cast(myDate);
                }

                @Override
                public String toString(MyDate myBean) {
                    if (myBean == null) {
                        return null;
                    }
                    return myBean.toString();
                }
            };

    }

}

IУ меня есть несколько вопросов:

  1. Зачем мне нужно указывать полное имя пакета при установке типа T, который будет возвращен из getConverter.Он имеет то же имя пакета, что и текущий класс, но мне нужно написать полное имя, иначе я получаю ошибку компиляции, не могу создать экземпляр.org.koushik.javabrains.rest.MyDate myDate = new org.koushik.javabrains.rest.MyDate();.Это не имеет значения, если я импортирую это наверху.import org.koushik.javabrains.rest.MyDate;
  2. В начале метода я получаю это предупреждение Параметр типа MyDate скрывает тип MyDate. Этот поставщик работает нормально и может приводить параметры пути запроса, но явсе еще задаюсь вопросом, как я могу избежать вышеупомянутых двух.

1 Ответ

0 голосов
/ 30 декабря 2018
  1. Вы не.Вы уже импортируете класс, поэтому вам не нужно запрашивать полное имя.

  2. Не переопределяйте свой переопределенный метод.Просто удалите параметр типа из сигнатуры метода.Обратите внимание на его отсутствие в следующем фрагменте.

    @Override
    public ParamConverter<MyDate> getConverter(final Class<MyDate> rawType, Type genericType, Annotation[] annotations) {
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...