簡體   English   中英

從Java中的泛型類獲取類實例

[英]Getting class instance from generic type in Java

我有一個方法,我傳遞一個泛型參數。 要執行一個必需的方法,我需要相同的類實例。 我怎么才能得到它。 我正在使用一種解決方法,但我想知道如何獲取Class實例。

我正在使用的片段是:

public <T> T readModelWithId(Class<T> c, Serializable pk) {
    // Some code here.
    T t = (T)session.get(c, pk);
    // Some code here.
    return t;
}

問題是我不想在這個方法中傳遞Class實例,因為它與泛型類型的返回類型T相同。

你無法在該方法中獲得類似T.class東西,所以你必須傳遞類參數,因為你需要它來從會話中獲取模型對象。

而且,這增加了一些額外的“類型安全性”。 您將強制調用者將返回類型指定為參數,因此返回的類型不僅僅是“調用者可能期望的任何內容”(盡管我同意這會使其變得多余)。

你不能這樣做是因為Java使用“類型擦除”來實現泛型。

http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

看起來你正在做一個通用的DAO。 我在這里做了類似的事情:

http://www.matthews-grout.co.uk/2012/01/my-generic-hibernate-dao.html

對於使用非轉換的非泛型,你無法對泛型做任何事情。 考慮代碼的非泛型版本:

public Object readModelWithId(Class c, Serializable pk) {
    // Some code here.
    Object t = session.get(c, pk);
    // Some code here.
    return t;
}

現在問同樣的問題,你能擺脫類實例參數c嗎?

泛型更適用於編譯時類型安全 - 您需要類實例,因此編譯器不會抱怨缺少強制轉換。 或者你可以完全拋棄泛型並投射結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM