2013-06-29 54 views
1

我试图让一个普通的GET-方法,通过一定的ID使用Hibernate来加载从数据库中的对象。开始之前,我的方法已经看起来像:通用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); 

给出的错误:类型不匹配:不能从对象转换至T

我知道我可以只使用一个电子xplicit投到T

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

但是有没有办法避免这种投?

谢谢

回答

2

否 - 在Sessionget(Class, Serializable)方法仅声明为返回Object。它本身不是一个通用的方法,这就是为什么你需要以某种方式或其他方式来演出。

你可以做演员更安全的使用方法Class.cast不过:

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

这将做适当的检查施放在执行时,而不是仅仅做一个“假装”剧组这并没有真正做任何事情。

+0

谢谢你的回答!这就是我想要的:) – MS1

+0

@Jon Skeet尼斯回答+1 –