次のような抽象ファクトリがあります。
public abstract class DAOFactory {
public abstract EntryDAO<EntryDTO> getEntryDAO();
...
}
私のDAOおよびDTOインターフェースでは次のようになります。
public interface EntryDTO extends GenericDTO {
}
public interface EntryDAO<T extends EntryDTO> extends GenericDAO<T, Serializable> {
}
そして、私の実装は次のようになります:
public class EntryDTOImpl implements EntryDTO {
}
public class EntryDAOImpl<T extends EntryDTO> extends GenericDaoImpl<EntryDTOImpl, ObjectId>
implements EntryDAO<T> {
}
ここで、ファクトリを作成してgetEntryDAO
メソッドをオーバーライドすると、次のようになります。
public class MyDAOFactory extends DAOFactory {
@Override
public EntryDAO<EntryDTO> getEntryDAO() {
try {
return new EntryDAOImpl<EntryDTOImpl>();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
コンパイル時エラーが発生します:
型の不一致: EntryDAOImpl から EntryDAO に変換できません
編集
抽象ファクトリを次のように更新しました。
public abstract <T extends EntryDTO> EntryDAO<T> getEntryDAO();
そして、私の工場の実装に変更を加えました:
@Override
public <T extends EntryDTO> EntryDAO<T> getEntryDAO() {
try {
return new EntryDAOImpl<EntryDTOImpl>();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
今、私はコンパイル時エラーを取得しています:
Type mismatch: cannot convert from EntryDAOImpl<EntryDTOImpl> to EntryDao<T>