在Java中,可以使用反射API来获取泛型类型。以下是一个示例代码:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
public class GenericExample {
private List<String> stringList;
public static void main(String[] args) throws NoSuchFieldException {
Type fieldType = GenericExample.class.getField("stringList").getGenericType();
if (fieldType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) fieldType;
Type[] typeArgs = parameterizedType.getActualTypeArguments();
for (Type typeArg : typeArgs) {
System.out.println("泛型类型: " + typeArg);
}
}
}
}
在这个示例中,我们定义了一个GenericExample
类,其中包含一个List<String>
类型的字段stringList
。我们使用getField()
方法获取该字段的Field
对象,并调用getGenericType()
方法获取其泛型类型。由于泛型类型是参数化的,我们可以使用ParameterizedType
接口来获取实际的类型参数。在这个例子中,我们只有一个类型参数,即String
类型。
需要注意的是,如果泛型类型嵌套在其他泛型类型中,例如Map<String, List<Integer>>
,则需要递归地获取所有的类型参数。此外,如果泛型类型是通过方法参数或返回值获取的,则需要使用getGenericParameterTypes()
或getGenericReturnType()
方法来获取泛型类型。
领取专属 10元无门槛券
手把手带您无忧上云