泛型类型多态混淆?(Generic type polymorphism confusion?)
我有一个像这样的抽象工厂:
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>
I have an abstract factory like so:
public abstract class DAOFactory { public abstract EntryDAO<EntryDTO> getEntryDAO(); ... }
With my DAO and DTO interfaces like so:
public interface EntryDTO extends GenericDTO { } public interface EntryDAO<T extends EntryDTO> extends GenericDAO<T, Serializable> { }
And my implementation like so:
public class EntryDTOImpl implements EntryDTO { } public class EntryDAOImpl<T extends EntryDTO> extends GenericDaoImpl<EntryDTOImpl, ObjectId> implements EntryDAO<T> { }
Now, if I create a factory and override the
getEntryDAO
method like so:public class MyDAOFactory extends DAOFactory { @Override public EntryDAO<EntryDTO> getEntryDAO() { try { return new EntryDAOImpl<EntryDTOImpl>(); } catch (UnknownHostException e) { e.printStackTrace(); } }
I get a compile time error:
Type mismatch: cannot convert from EntryDAOImpl to EntryDAO
EDIT
I've updated my abstract factory like so:
public abstract <T extends EntryDTO> EntryDAO<T> getEntryDAO();
And made the change in my factory implementation:
@Override public <T extends EntryDTO> EntryDAO<T> getEntryDAO() { try { return new EntryDAOImpl<EntryDTOImpl>(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Now I'm getting the compile time error:
Type mismatch: cannot convert from EntryDAOImpl<EntryDTOImpl> to EntryDao<T>
原文:https://stackoverflow.com/questions/12594080