1

したがって、本質的に同じ呼び出しを行うメソッドがたくさんありますが、唯一の違いはジェネリックのクラス名です。例:

現時点の:

public void methodA(ARequest request, ADelegate delegate)
{
     JsonClient<ARequest, AResponse> client = new JsonClient<ARequest, AResponse>(request.ServiceServerUrl, request, new AResponse());
     client.sendRequest(delegate);
}

public void methodB(BRequest request, BDelegate delegate)
{
         JsonClient<BRequest, BResponse> client = new JsonClient<BRequest, BResponse>(request.ServiceServerUrl, request, new BResponse());
         client.sendRequest(delegate);
}

私がやりたいことは次のとおりです。

private void serviceCall<R extends RequestBase, S extends ResponseBase>(ADelegate delegate)
{
    JsonClient<R, S> client = new JsonClient<R, S>(request.ServiceServerUrl, request, new AResponse());
    client.sendRequest(delegate);
}

public void methodA(ARequest request, ADelegate delegate)
{
    serviceCall<ARequest, AResponse>(delegate);
}

public void methodB(BRequest request, BDelegate delegate)
{
    serviceCall<BRequest, BResponse>(delegate);
}

これはC#で可能だと思いますが、Javaでこれを適切に行う方法を知りたいだけです。

編集:明確にするために。

4

2 に答える 2

2

次のように記述できるはずです。

private <R extends RequestBase, S extends ResponseBase> void serviceCall(
        R request,
        S response,
        ADelegate delegate
) {
    JsonClient<R, S> client = new JsonClient<R, S>(request.ServiceServerUrl, request, response);
    client.sendRequest(delegate);
}

Java では次responseのようなことはできないため、呼び出し元はインスタンス化して を渡す必要があることに注意してください。new S()

public void method(ARequest request, ADelegate delegate) {
    serviceCall(request, new AResponse(), delegate);
}

何かのようなもの

MyClass.<ARequest, AResponse>serviceCall(request, new AResponse(), delegate)

コンパイラが型引数を推測するため、ここでは必要ありません。

于 2013-01-10T22:35:26.740 に答える
1

ということですか?

public <T extends RequestBase, E extends ResponseBase> void method(T request, E delegate)
{
     JsonClient<T, E> client = new JsonClient<T, E>(request.ServiceServerUrl, request, new AResponse());
     client.sendRequest(delegate);
}

のように呼び出しClassName.<ARequest, AResponse>method(request, response)ます。

于 2013-01-10T22:31:05.783 に答える