在Java中,由于類型擦除,我們無法直接獲取當前類的泛型類型。但是,我們可以通過子類或者接口實現的方式來獲取泛型類型。這里有一個例子:
public abstract class TypeReference<T> {
private final Type type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
if (superClass instanceof Class) {
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
} else {
this.type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
}
public Type getType() {
return this.type;
}
}
使用這個TypeReference
類,你可以獲取泛型類型。例如:
public class MyClass<T> {
private TypeReference<T> typeReference = new TypeReference<T>() {};
public Type getGenericType() {
return typeReference.getType();
}
}
在這個例子中,我們創建了一個名為MyClass
的泛型類,并在其中定義了一個TypeReference
對象。通過創建一個匿名子類并實例化TypeReference
,我們可以獲取泛型類型。然后,我們可以通過調用getGenericType()
方法來獲取泛型類型。
請注意,這種方法僅適用于子類或接口實現。在其他情況下,由于類型擦除,我們無法直接獲取泛型類型。