通用类类型参数

时间:2016-12-13 16:37:10

标签: java generics nested-generics

先决条件:

有第三方库提供以下代码(可以更改):

/**
* @param <T> result type of the request
* @param <U> exception type of the request
**/
public interface Request<T, U extends ThirdPartyException> {}


public class ConcreteRequest<T> implements Request<T, ConcreteException> {}


public class SimpleRequest<T> implements Request<T, SimpleException> {}


public class Api {
    public void doConcreteRequest(ConcreteRequest<ConcreteType1> request);
    public void doSimpleRequest(SimpleRequest<ConcreteType2> request);
    public void doAnotherRequest(SimpleRequest<ConcreteType1> request);
}

要求:

我想构建一个简单的类来模拟这些请求,并为模拟添加一些常用功能。

到目前为止我所拥有的:

public class MockRequestBuilder<T extends Request<R, U>, R, U extends ThirdPartyException> {

    private Class<T> type;

    public MockRequestBuilder(Class<T> type) {
        this.type = type;
    }

    public T build() {
        T mock = mock(type);
        // Code to add additional stuff to mock here
        return mock;
    }
}

问题:

如何使用MockRequestBuilder构建此类模拟请求的具体,类型安全的实例?

显然

new MockRequestBuilder<SimpleRequest<ConcreteType1>, ConcreteType1, SimpleException>(SimpleRequest.class);

不起作用,因为SimpleRequest.class不提供有关其他两种泛型类型的信息。

我找到的第二种方法是使用

new MockRequestBuilder<SimpleRequest, ConcreteType1, SimpleException>(SimpleRequest.class);

但是,当调用方法SimpleRequest时,这当然会返回SimpleRequest<ConcreteType1>没有类型信息而不是所需的build();

0 个答案:

没有答案