ジェネリックスを使用してStrategy + Factoryパターンを実装しようとしています。目標は、クライアントのクラスにDocumentDaoを扱うことができるインタフェースDocumentDaoの実装を返すことです。ドキュメントの異なるサブタイプに対してDocumentDaoを拡張する複数のDaoインタフェースがあります。ここで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>
この状況に対処するには? 同様のソリューションを入手するにはどうすればよいですか?
おかげ
最初のエラーで申し訳ありませんが、それはちょうど私の実際のコードではそれが正しいことを見落としたので、私は質問を更新します。 第2のポイントは私の問題を解決しました。ありがとうございました。 – user1781028