反射实用工具如何替换已弃用的方法?



org.springframework.util.ReflectionUtils包中的许多方法已被弃用,但没有提示应使用哪些方法作为替换。如何正确替换以下方法?

org.springframework.util.ReflectionUtils.makeAccessible();
org.springframework.util.ReflectionUtils.isAccessible();

我的目标是获取所有字段名称并将它们保存到Map中。到目前为止,以下代码有效,但是如何替换已弃用的方法?

ReflectionUtils.doWithFields(object.getClass(), field -> {
if (!field.isAccessible()) ReflectionUtils.makeAccessible(field);
map.put(field.getName(), ReflectionUtils.getField(field, object));
});

由于模块系统可访问的检查和更改现在使用新方法,要使某些内容可访问,您应该查看trySetAccessible
https://docs.oracle.com/javase/10/docs/api/java/lang/reflect/AccessibleObject.html#trySetAccessible((
它返回真/假值而不是异常。

并检查访问使用canAccess(object)

object - 此反射对象的声明类的实例对象,如果它是实例方法或字段

https://docs.oracle.com/javase/10/docs/api/java/lang/reflect/AccessibleObject.html#canAccess(java.lang.Object(

最新更新