我有一个像List<? extends MyPojo> myPojos = new ArrayList<>();
这样的字段。
我想 - 通过反思 - 得到myPojos
的上限是MyPojo
类型的事实。
我可以Field
没问题,然后getGenericType
,但这只会返回一个没有方法的Type
。我可以将其投放到ParameterizedType
,但getActualTypeArguments()
。
toString()
上的ParameterizedType
方法返回预期值,似乎无法访问上层通配符上的信息,ParameterizedType
的所有实现似乎都是在sun.
包中。
那么,我可以在不解析toString()
输出的情况下获取泛型类型的上限而不依赖于sun.*
类吗?或者这些信息是否因擦除而丢失?
答案 0 :(得分:5)
您需要转换为ParameterizedType
,然后将Type
值从getActualTypeArguments()
转换为WildcardType
,其中getUpperBounds()
方法。
所以
assert MyPojo.class == ((WildcardType) ((ParameterizedType) listField.getGenericType()).getActualTypeArguments()[0]).getUpperBounds()[0];