android泛型类型参数,java泛型类型参数和对这些类型的操作

在寻找我最近遇到的有趣情况的答案时,我遇到了以下问题:类型安全,Java泛型和查询

我写了下面的课(清理了一下)

public abstract class BaseDaoImpl extends HibernateDaoSupport implements BaseDao {

/**

* Finds and Returns a list of persistent objects by a collection of criterions

* @param criterions

* @return list of persistent objects

* @throws DBException

*/

@SuppressWarnings("unchecked")

protected List findByCriteria(Collection criterions) throws DBException {

try {

DetachedCriteria criteria = DetachedCriteria.forClass(T.class); // BAD!!!

for (Criterion criterion : criterions) {

criteria.add(criterion);

}

List result = getHibernateTemplate().findByCriteria(criteria);

return result;

}

catch (Exception e) {

throw new DBException(T.class + " lookup by " + criterions + " failed", e); // BAD!!!

}

}

}

对于某些(可能是好的理由)T.class导致编译时错误.

我的第一个问题是为什么?

如果我把它改成T.getClass()显然不应该编译 - 因为没有'T'当"扩展"或经历"擦除" - 应该有一个静态的方法,如那.eclipse IDE提供以下编译消息:

无法从Object类型对非静态方法getClass()进行静态引用

我的第二个问题是为什么?这个错误实际上意味着什么?

最后,以上述链接中指定的方式解决这个问题(或者更确切地说,我的解释)是最优化的方式吗?

public abstract class BaseDaoImpl extends HibernateDaoSupport implements BaseDao, MyGenericHelper {

/**

* Finds and Returns a list of persistent objects by a collection of criterions

* @param criterions

* @return list of persistent objects

* @throws DBException

*/

@SuppressWarnings("unchecked")

protected List findByCriteria(Collection criterions) throws DBException {

try {

DetachedCriteria criteria = DetachedCriteria.forClass(getGenericClass()); // BAD!!!

for (Criterion criterion : criterions) {

criteria.add(criterion);

}

List result = getHibernateTemplate().findByCriteria(criteria);

return result;

}

catch (Exception e) {

throw new DBException(getGenericClass() + " lookup by " + criterions + " failed", e); // BAD!!!

}

}

}

public interface MyGenericHelper {

public Class getGenericClass();

}

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值