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.*类吗?或者这些信息是否因擦除而丢失?
你需要转换为ParameterizedType,然后将Type值转换为getActualTypeArguments()to WildcardType,它有一个getUpperBounds()方法.
所以
assert MyPojo.class == ((WildcardType) ((ParameterizedType) listField.getGenericType()).getActualTypeArguments()[0]).getUpperBounds()[0];
Run Code Online (Sandbox Code Playgroud)