如何获取通配符通用字段的上限?

Sle*_*led 5 java generics reflection wildcard

我有一个领域List<? extends MyPojo> myPojos = new ArrayList<>();.

我想 - 通过反思 - 得到上限myPojos是类型的事实MyPojo.

我可以得到Field没问题,然后getGenericType,但这只是返回一个Type没有方法的东西.我可以把它投到ParameterizedType,但是getActualTypeArguments().

toString()对方法ParameterizedType返回的期望值,似乎是没有办法访问的通配符上boud的信息,以及所有的实现ParameterizedType似乎是在sun.包.

那么,我可以 - 不解析toString()输出 - 获取泛型类型的上限而不依赖于sun.*类吗?或者这些信息是否因擦除而丢失?

Lou*_*man 5

你需要转换为ParameterizedType,然后将Type值转换为getActualTypeArguments()to WildcardType,它有一个getUpperBounds()方法.

所以

assert MyPojo.class == ((WildcardType) ((ParameterizedType) listField.getGenericType()).getActualTypeArguments()[0]).getUpperBounds()[0];
Run Code Online (Sandbox Code Playgroud)