读取字段的泛型实参
Field f = MyClass.class.getDeclaredField(“items”);
Type gt = f.getGenericType();
if (gt instanceof ParameterizedType pt) {
Type[] args = pt.getActualTypeArguments(); // 例如 [String.class]
}
读取方法返回值的泛型实参
Method m = MyClass.class.getMethod(“listNames”);
Type rt = m.getGenericReturnType();
if (rt instanceof ParameterizedType pt) {
Type[] args = pt.getActualTypeArguments(); // 例如 [String.class]
}
通过父类保留的泛型实参(匿名子类技巧)
abstract class Holder { }
class StringHolder extends Holder { }
Type sup = StringHolder.class.getGenericSuperclass(); // 为 ParameterizedType
Type arg = ((ParameterizedType) sup).getActualTypeArguments()[0]; // String.class
借助TypeToken在运行期“保留”泛型(Guava)
TypeToken<List> token = new TypeToken<List>() {};
Type type = token.getType(); // 可在后续用于序列化、映射等场景
以上示例覆盖了字段、方法、父类以及第三方库的常见做法。