SonarLint-Reflection should not be used to increase accessibility of classes, methods, or fields

问题描述

在使用反射读取属性值时,设置对象的访问权限,保证对private的属性的访问。
会写如下代码

Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限,保证对private的属性的访问
field.setAccessible(true);

SonarLint扫描提示如下

This accessibility update should be removed
Reflection should not be used to increase accessibility of
 classes, methods, or fields

解决办法

使用Spring提供的反射工具类ReflectionUtils的makeAccessible(Field field)即可消除提示。

package org.springframework.util.ReflectionUtils;

public static void makeAccessible(Field field) {
    
    
        if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {
    
    
            field.setAccessible(true);
        }

    }
/**
* 不考虑从祖先类继承的属性,只获取当前类属性,包括四类访问权限,private,protect,default,public
*
* @param fieldName 属性名
* @param object    反射的对象
* @return 属性值
*/
private static String getFieldValueByFieldNameWayTwo(String fieldName, Object object) {
    
    
        try {
    
    
            Field field = object.getClass().getDeclaredField(fieldName);
            //设置对象的访问权限,保证对private的属性的访问
            ReflectionUtils.makeAccessible(field);
            return (String) field.get(object);
        } catch (Exception e) {
    
    
            return null;
        }
 }

如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【点赞】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!
作者:勤快的小蚂蚁
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
————————————————
版权声明:本文为CSDN博主「勤快的小蚂蚁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fxzzq/article/details/126330602

猜你喜欢

转载自blog.csdn.net/fxzzq/article/details/126330602