再鄙视一下泛型

泛型在某些情况下却是很强大 如泛型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();
}
....
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值