簡體   English   中英

參數化類型的訪問類名稱

[英]Access class name of parameterized type

我有一個參數化的類。 我想獲取由類名表示的類的名稱。 例如,我要執行的操作是:

public T foo(){
    System.out.println(T.class.getName());
}

您不能以這種方式這樣做,因為T在編譯時是未知的。 您可以達到類似的目的:

public void foo(T t) {
    System.out.println(t.getClass().getName());
}

請注意,這采用T的實例,並會打印出其動態類型的名稱。

這是否足夠好替代取決於您的用例。

Java泛型不能那樣工作。 如果T上有任何界限,則可以通過查詢類型變量定義來訪問界限。 例如:

public class Foo<T extends Bar>{}

可以讓您到達Bar ,但不能到達您實際使用的Bar的子類型。 對不起,它不起作用。

閱讀Java泛型常見問題解答以獲取更多信息。

順便說一句:解決此問題的一種常見方法是將T的子類型傳遞到您的類中,例如

public T foo(Class<? extends T> tType){
    System.out.println(tType.getName());
}

我知道這很麻煩,但這是所有Java泛型允許的。

public T foo(T t){
    System.out.println(t.getClass().getName());
}

暫無
暫無

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

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