1
我試圖使用泛型實現Strategy + Factory模式。我們的目標是返回一個客戶端類的接口DocumentDao的實現,它可以處理類型T extends Document,所以我有多個Dao接口爲DocumentDao的不同子類型擴展DocumentDao。Java - 帶泛型的工廠和戰略模式
這裏是我的代碼:
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>
如何處理這種情況? 我如何獲得類似的解決方案?
由於
對不起,第一個錯誤,這只是一個疏忽(在我的真實代碼中是正確的),所以我會更新這個問題。 第二點解決了我的問題,非常感謝。 – user1781028