我有一個抽象工廠就像這樣:泛型多態混淆?
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();
}
}
我得到一個編譯時錯誤:
Type mismatch: cannot convert from EntryDAOImpl to 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>
請參閱編輯。 – wulfgarpro
我現在已經編輯了我的答案。 – davidXYZ
謝謝 - 爲什麼我不能使用一個接口作爲我的參數化類型,並且有一個實現被替換? – wulfgarpro