【发布时间】:2017-08-30 16:45:13
【问题描述】:
我正在尝试使用泛型实现策略 + 工厂模式。目标是向客户端类返回一个可以处理类型 T 扩展 Document 的接口 DocumentDao 的实现,因此我有多个 Dao 接口扩展 DocumentDao 用于不同子类型的 Document。
这是我的代码:
public class Document { ... }
public class DocumentA extends Document { ... }
public class DocumentB extends Document { ... }
public interface DocumentDao<T extends Document> {
public void update(T document);
}
public interface DocumentADao<DocumentA> {}
public interface DocumentDaoFactory {
public <T extends Document> DocumentDao<T> getDaoInstance(Class<T> clazz);
}
然后我尝试使用工厂:
private <T extends Document> void someMethod(T document) {
...
DocumentDao<T> documentDao = this.documentDaoFactory.getDaoInstance(document.getClass());
documentDao.update(document);
...
}
但是编译器抱怨 getDaoInstance() 调用:
Type mismatch: cannot convert from DocumentDao<? extends AbstractGDriveDocument<?>> to DocumentDao<T>
如何处理这种情况? 如何获得类似的解决方案?
谢谢
【问题讨论】:
标签: java generics design-patterns factory-pattern strategy-pattern