我正在尝试使用hibernate通过某个id从数据库加载对象的通用get方法。在我开始之前,该方法看起来像:
public static Object getObjectFromDatabase(Class c, long id) {
Transaction newTransaction = getSession().beginTransaction();
Object result = getSession().get(c, id);
newTransaction.commit();
return result;
}
然后我尝试使用以下代码获得该方法的通用性:
public static <T> T getObjectFromDatabase(Class<T> c, long id) {
Transaction newTransaction = getSession().beginTransaction();
T result = getSession().get(c, id);
newTransaction.commit();
return result;
}
不幸的是行
T result = getSession().get(c, id);
发出错误:类型不匹配:无法从Object转换为T
我知道我可以使用显式强制转换为T
T result = (T) getSession().get(c, id);
但有没有办法避免这种演员?
谢谢
答案 0 :(得分:2)
否 - get(Class, Serializable)
中的Session
方法仅被声明为返回Object
。它本身并不是一般的方法,这就是为什么你需要以某种方式进行演员表。
您可以使用Class.cast
方法使投射更安全:
T result = c.cast(getSession().get(c, id));
这将在执行时进行适当检查的演员表,而不仅仅是做一个“假装”演员表而不会做任何事情。