2013-06-29 57 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 –