专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

反射黑科技,获取对象参数中哪些属性不为null

日常开发中,总会遇到一些一下子摸不着头脑的需求,但是静下心来想想,方法总是有的,虽然最后可能会搞的面目全非。

需求一

给一些方法增加操作记录。so easy,增加操作记录有两种方式。

  • 方式一比较高大上,AOP+注解,推荐环绕增强。
  • 方式二就是写一个通用方法,在需要加记录的地方调一下就好了。虽然low,但是简单,容易控制。

要加的地方不多,先用第二种方式简单来搞一下,不然产品万一有后手就麻烦了。

需求二

果不其然,需求又来了。有几个方法是修改操作,产品想记录用户把 哪些值修改成了哪些值。

虽然有点绕,但是不慌。把修改之前的数据查出来,记录一下,然后和传的参数对比,就好了。

事实证明,想的还是太简单了。

  • 简单一点的操作,if-else。使用if-else判断哪些参数有值,哪些参数为null。 参数少还好,如果参数很多或者参数是个对象,对象里有十几个成员变量,一个个都用if-else判断,最后真的是惨不忍睹。 刚好有一个方法是用@RequestBody接收参数…

此时我灵机一动,怎么能忘了反射呢?

先看用法,判断一个对象里哪些变量非空

用一个简单的例子,假如有这样一个对象,假如它有很多成员变量,作为参数传进来,而现在我要用反射来判断它哪些变量非空。

@Data
public class User {

    private String name;

    private Integer age;

    private String gender;

    private String address;

}

@Test
public void testUser() throws Exception {
    //获取class
    Class<User> userClass = User.class;
    //获取所有的成员变量
    Field[] fields = userClass.getDeclaredFields();

    //初始化一个对象
    User user = new User();
    //设置值
    user.setName("test");
    user.setAge(18);

    for (Field field : fields) {
        //设置权限
        field.setAccessible(true);
        //从对象中取该字段的值。可以理解为: field是一个瓶子,把对象装进去就能得到值
        Object o = field.get(user);
        if (o != null) {
            //打印
            System.out.println(field.getName() + " = " + o);
        } else {
            System.out.println(field.getName() + " is null");
        }
    }
}

执行结果

name = test
age = 18
gender is null
address is null

稍微改造一下,弄个工具类,写个静态方法,就可以随处调用了。

文章永久链接:https://tech.souyunku.com/33771

未经允许不得转载:搜云库技术团队 » 反射黑科技,获取对象参数中哪些属性不为null

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们