[Java] Java对象如果向JavaScript对象那样动态增加属性

Java对象如何像JavaScript对象那样动态增加属性

JS对象动态增加属性

// 在js中:如果我们直接想为对象增加一个属性,直接obj.xxx="xxx"就行了
let obj = {
	name:'泰勒',
	sex:'女',
	age:22
}
obj.county="美国"	//这样obj对象就有一个county属性了

Java对象可以做到吗?

Java对象可以利用Map来仿造达到类似的目的(并不是完全和JS过程相同)

Person对象

我想给这个Person增加一个country属性,值是String类型;
这是出于前后端交互的需要.

@Data		//省略对象的getter、setter、有参、无参构造、toString
public class Person {
    private String name;    //姓名
    private String sex;     //性别
    private int age;        //年龄
}

DynamicPropertiesUtil

这是一个工具类,利用反射和Map动态为对象增加属性(避免再次创建VO来前后端交互)


/**
 * @作者 Forest Hoo
 * @日期 2023-02-12 15:27
 */
public class DynamicPropertiesUtil {
    /**
     * 给一个对象动态增加属性,最终返回Object类型,给前端展示
     * @param person
     * @param key
     * @param value
     * @return
     */
    public static Map objAddProperty(Object person, String key, String value) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //准备
        Class<?> personClass = person.getClass();
        Field[] fields = personClass.getDeclaredFields();

        Map map = new HashMap();
        //处理
        for (Field field : fields) {
            field.setAccessible(true);
            String fieldName = field.getName();
            String typeName = field.getGenericType().getTypeName();
            Object fieldValue = field.get(person);
            System.out.println("属性名:"+fieldName+",类型:"+typeName+",值:"+ fieldValue);
            map.put(fieldName,fieldValue);
        }
        map.put(key,value);
        //返回
        return map;

    }


}

测试类

/**
 * @作者 Forest Hoo
 * @日期 2023-02-12 15:24
 */
public class ReflectTest {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        Person person = new Person("泰勒", "女", 22);
        Map map = DynamicPropertiesUtil.objAddProperty(person, "county", "美国");

        map.forEach((key,value)->{
            System.out.println(key+":"+value);
        });

    }
}

下面是打印结果,原来的person类新增了一个county属性;可以直接把Map转成JSON返回给前端,结果是一样的
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值