再鄙视一下泛型

xiaoxiao2026-06-12  8

泛型在某些情况下却是很强大 如泛型Dao 提高coder们的生产率 但在某些情况下却得不到预期效果 什么时候呢? 看个例子吧 HibernateEntityCacheDao是一个泛型类,见附录 EntityCache也是一个泛型类 见附录 在实际使用时 如下 HibernateEntityCacheDao dao = new HibernateEntityCacheDao<User, Long>; 这时entityClass的类型是User,就是说E的实际类型能够获取 但是 实例化EntityCache时问题就来了,entityCache 中得到的E是Object 并不是期待的User entityCache = new EntityCache<E>(); 这难道是擦除法导致的? [b]附录[/b] public class HibernateEntityCacheDao<E, ID extends Serializable> extends HibernateDaoSupportEx implements GenericDao<E, ID>{ protected final Log log = LogFactory.getLog(getClass()); private Class<E> entityClass; private Class<ID> idClass; /** * 实体缓存 */ private EntityCache<E> entityCache = null; //[color=red]这个地方使用了泛型[/color] public HibernateEntityCacheDao(){ idClass = GenericsUtils.getSuperClassGenricType(getClass(), 1); entityClass = GenericsUtils.getSuperClassGenricType(getClass()); entityCache = new EntityCache<E>();//CacheFactory.getEntityCache(entityClass); entityListCache = CacheFactory.getEntityListCache(entityClass); hashFieldCache = CacheFactory.getHashFieldCache(entityClass); }.....} EntityCache源代码 public class EntityCache<E> implements Cache{ private Map<String, E> entityMap = null; private Class<E> entityClass; public EntityCache() { entityMap = new HashMap<String, E>(); entityClass = GenericsUtils.getSuperClassGenricType(getClass()); } public EntityCache(int initialCapacity) { entityMap = new HashMap<String, E>(initialCapacity); entityClass = GenericsUtils.getSuperClassGenricType(getClass()); } public void clear() { entityMap.clear(); }....}
转载请注明原文地址: https://www.6miu.com/read-5050046.html

最新回复(0)