0

コードに次のクラスがあります

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 の場合、そのコンストラクターはパラメーター Login.class を使用して super を呼び出す必要があります。これはこのように機能しますが、E.class と言う一般的な方法ではありません。これどうやってするの ?

編集

次のクラスを単一のクラスにマージしたい

public class LoginService extends 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

Type Erasure のため、できません。型パラメーターとして使用したクラスの詳細は、ランタイム クラスには含まれません。これは Java Generics の制限です

http://docs.oracle.com/javase/tutorial/java/generics/erasure.htmlを参照してください。

于 2013-04-21T11:34:31.550 に答える