ReflectionUtils如何替换不推荐使用的方法?

时间:2018-08-14 08:53:04

标签: java spring reflection

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));
        });

1 个答案:

答案 0 :(得分:1)

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

要检查访问权限,请使用canAccess(object)

  

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

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