[英]Generating a class that access a dynamic field (of a parameterized type) at runtime with ByteBuddy
[英]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.