2

我正在尝试获取一个通用的 get 方法,以使用休眠的某个 id 从数据库加载对象。在我开始之前,该方法看起来像:

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);

但是有没有办法避免这种演员?

谢谢

4

1 回答 1

3

否 - 中的get(Class, Serializable)方法Session仅声明为 return Object。它本身不是通用方法,这就是为什么您需要以某种方式进行强制转换的原因。

不过,您可以使用该Class.cast方法使演员表更安全:

T result = c.cast(getSession().get(c, id));

这将在执行时进行正确检查的演员表,而不是仅仅做一个没有真正做任何事情的“假装”演员表。

于 2013-06-29T08:21:00.717 回答