[英]How to get generic field type (string representation) with help reflection - Java?
[英]How to get main type of generic field with reflection in java?
假設我的項目中有以下這些類:
public class MyBaseEntity<T> {
T id;
}
public class MySubClass extends MyBaseEntity<Long> {
}
現在,我想用java反射MySubClass
的id
( java.lang.Long
)字段的主要類型,我該怎么做?
更新
我將類更改為此並添加了2個新Class
:
public class MySubClass3 extends MyBaseEntity<Integer> {
}
public class MySubClass2 extends MySubClass3 {
}
public class MySubClass extends MySubClass2 {
}
現在,如何獲取id的主要類型,換句話說,如果繼承的深度是動態的,我如何獲取特定類的id
的主要類型?
將類型傳遞給基類的構造函數
public MyBaseEntity(Class<?> clazz) {
this.clazz = clazz;
}
好吧,您可以使用以下方法在運行時中定義哪個類用於MyBaseEntity
的T
參數:
Type type = MySubClass.class.getGenericSuperclass();
if(type instanceof ParameterizedType) {
Type parameterType = ((ParameterizedType) type).getActualTypeArguments()[0];
if(parameterType instanceof Class) {
System.out.println(((Class<?>)parameterType).getName());
// prints java.lang.Long
}
}
但這是一種容易出錯的方法。 您可能具有更棘手的繼承性,或者使用通配符,例如class SubClass<T extends Number> extend MyBaseEntity<T>
,您將必須專門處理此類情況。 因此,我建議您使用@Reimeus建議的方法。
使用TypeTools :
Class<?> type = TypeResolver.resolveRawArgument(MySubClass.class, MyBaseEntity.class);
assert type == Integer.class;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.