前提条件:
有一个第三方库提供以下代码(不能更改):
/**
* @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();