我的代码中有以下类
public class GenericService<E> extends SpringAndroidSpiceRequest<E> {
public GenericService(Class<E> clazz) {
super(clazz);
}
@Override
public E loadDataFromNetwork() throws Exception {
return null;
}
}
现在这个类的构造函数采用类型类的Argument。我想删除这个参数,并直接说像super(E.class)?但是这给了我一个错误。所以,如果我GenericService loginService = new GenericService 该构造函数应该使用params Login.class调用super。这样工作就像这样,但不是说E.class的通用方法。我怎样才能做到这一点 ?
我想将以下类合并为单个clas
公共类LoginService扩展了SpringAndroidSpiceRequest {
private Login.Request loginRequest;
private final String loginRequestURL = "/login";
public LoginService() {
super(Login.Response.class);
}
public final Login.Response loadDataFromNetwork() throws Exception {
Uri.Builder uriBuilder = Uri.parse(
ProfileInfo.getActiveProfile().getbaseURL() + loginRequestURL)
.buildUpon();
String url = uriBuilder.build().toString();
return getRestTemplate().postForObject(url, loginRequest,
Login.Response.class);
}
@Override
public final String createCacheKey() {
return loginRequest.getUsername() + "" + loginRequest.getPassword();
}
}
和
public class ForgetPasswordService extends
SpringAndroidSpiceRequest<ForgetPassword.Response> {
private final String forgotPasswordURL = "/forgotpassword";
public ForgetPasswordService() {
super(ForgetPassword.Response.class);
}
public final ForgetPassword.Response loadDataFromNetwork() throws Exception {
Uri.Builder uriBuilder = Uri
.parse(ProfileInfo.getActiveProfile().getbaseURL()
+ forgotPasswordURL).buildUpon();
String url = uriBuilder.build().toString();
return getRestTemplate().postForObject(url, forgotPasswordRequest,
ForgetPassword.Response.class);
}
public final String createCacheKey() {
return forgotPasswordRequest.getPhoneOrEmailAddress();
}
}
这两个类都是相同的。唯一的区别是它们的响应类型。现在我有大约23个这样的课程。如果不需要,可以添加所有这些类。
亲切的问候
答案 0 :(得分:4)
你不能因为类型擦除。您用作类型参数的类的详细信息都不会进入运行时类。这是Java Generics的限制
请参阅http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
答案 1 :(得分:0)
依赖注入:(
找到传递类对象的方法,例如
之类的东西<constructor-arg type="java.lang.Class" value="com.mycompany.Foo"/>
(我不确定这在春天是否正确)
或创建子类:
public class FooService extends GenericService<Foo>{
public FooService() {
super(Foo.class);
}
}