我正在JAX-RS应用程序中提供EFK
的实现。此实现提供了接口中的抽象方法的定义,签名为:
ParamConverterProvider
我正在玩在线教程,并对实现进行了如下修改。
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();
}
};
}
}
返回的T型实例化时,为什么需要提供完整的软件包名称。它具有与此当前类相同的程序包名称,但仍然需要编写完全限定的名称,否则会出现编译错误,无法实例化。
getConverter
。如果将其导入顶部,则没有任何区别。 org.koushik.javabrains.rest.MyDate myDate = new org.koushik.javabrains.rest.MyDate();
答案 0 :(得分:0)
您不知道。您已经导入了该类,因此您不需要完整的名称。
请勿重新参数化您覆盖的方法。只需从方法签名中删除类型参数即可。请注意以下代码段中没有它。
@Override
public ParamConverter<MyDate> getConverter(final Class<MyDate> rawType, Type genericType, Annotation[] annotations) {