反射获取类或对象属性和值

       最近在开发过程中,由于部分常量配置在接口而非枚举中,当我们需要通过属性名去获取具体接口中常量对应的值时,或是要获取该接口中所有常量名和对应值的键值对集合,显得有些麻烦或是无从下手,故这里封装一个通用的工具类来满足此类需求(扩展到类和对象中),做以下总结。

      大致思路:定义 ReflectObjectUtil 工具类,通过反射获取类或对象信息,并将对应信息组装,按照要求的格式返回。

1. 测试实体

/** 测试实体Person
 *
 * @author jiayuan9608@163.com
 * @version 1.0.0
 * @date 2019-05-08 14:19
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {

    private String name = "zhangsan";

    private byte sex = 1;

    private int age = 18;

    private String introduce = "niuBility";
}

2. 接口常量

/**
 * 测试接口常量demo
 *
 * @author jiayuan9608@163.com
 * @version 1.0.0
 * @date 2019-05-08 14:23
 */
public interface Constant {

    int CONFIG_INT1 = 1;

    int CONFIG_INT2 = 2;

    int CONFIG_INT3 = 3;

    String CONFIG_STRING1 = "1";

    String CONFIG_STRING2 = "2";

    String CONFIG_STRING3 = "3";
}

3. 获取单个对象的所有键值对(变量名-变量值)

通过泛型参数限定传入一个对象,该方法传入一个对象,返回该对象所有的属性-值。

注意:这里Collectors.toMap(key,value)中的value值不能为空,若对象属性值存在为空的情况,则会抛出空指针异常,查看toMap()方法源码,发现在map集合进行merge合并时进行了非空判断操作,如下:

故这里使用Optional进行空值的包装,在为空时用0代替(看具体业务场景)。ps: 做map转换记得写键值冲突策略,养成好习惯,这里采用后者覆盖,(k1, k2) -> k2。

/**
     * 获取单个对象的所有键值对
     *
     * @param t
     * @param <T>
     * @return
     */
    public static <T> Map<String, Object> getKeyAndValue(T t) {
        Map<String, Object> map = Maps.newHashMap();
        Class clazz = (Class) t.getClass();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值