Java静态工厂,用于实现具有泛型方法参数的接口的类



我有以下静态工厂实现:

public class HandlersFactory {
private static Map<ProviderType, Handler<? extends Request>> handlers;
public static Handler<? extends Request> get(ProviderType type) {
if (handlers == null) {
initializeHandlers();
}
if (handlers.containsKey(type)) {
return handlers.get(type);
}
throw new HandlerNotFoundException("Handler " + type.toString() + " not found");
}
private static void initializeHandlers() {
handlers = new HashMap<>();
handlers.put(ProviderType.FIRST, new FirstHandler());
handlers.put(ProviderType.SECOND, new SecondHandler());
}

FirstHandler和SecondHandler都实现了以下接口:

public interface Handler<R extends Request> {
void handle(R request);
}

Request对象是包含请求的附加数据的两个附加类的基类。

在我的主要课程中,我试图做以下事情:

public void handle(Request request) {
HandlersFactory.get(request.getProvider()).handle(request);
}

请求的来源是HTTP请求体,它可以解析为任何一个请求子类。我得到的编译错误是:;所需类型:捕获?扩展请求,提供请求";。

我知道Request对象不会自我扩展,这听起来很奇怪,但有没有办法我仍然可以用这种方式调用handle方法?

虽然不是很优雅,但以下修改应该有效:

public static <T extends Request> Handler<T> get(ProviderType type) {

return (Handler<T>) handlers.get(type);

相关内容

  • 没有找到相关文章

最新更新