0

我的代码中有以下类

public class GenericService<E> extends  SpringAndroidSpiceRequest<E> {
    public GenericService(Class<E> clazz) {
        super(clazz);

    }
    @Override
    public E loadDataFromNetwork() throws Exception {
        return null;
    }
}

现在,此类的构造函数采用类类型的参数。我想去掉这个参数,直接说 super(E.class) 之类的话?但这给了我一个错误。因此,如果我 GenericService loginService=new GenericService 构造函数应该使用参数 Login.class 调用 super。这就像这样工作,但不是说 E.class 的通用方式。我怎样才能做到这一点 ?

编辑

我想将以下类合并为一个类

公共类 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 个这样的课程。如果不需要,添加所有这些类真的很糟糕。

亲切的问候

4

2 回答 2

4

你不能因为类型擦除。您用作类型参数的哪个类的详细信息都没有使其进入运行时类。这是 Java 泛型的限制

请参阅http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

于 2013-04-21T11:34:31.550 回答
0

有依赖注入:(

要么找到一种方法来传递类对象,例如

<constructor-arg type="java.lang.Class" value="com.mycompany.Foo"/>

(我不确定这在春天是否正确)

或创建一个子类:

public class FooService extends GenericService<Foo>{
    public FooService() {
        super(Foo.class);
    }
}
于 2013-04-21T16:39:24.033 回答