Java如何获得一个对象中所有带set方法的字段(形成Field对象)?包括父类的。有现成的工具类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何获得一个对象中所有带set方法的字段(形成Field对象)?包括父类的。有现成的工具类相关的知识,希望对你有一定的参考价值。
吗?
参考技术A 在Java中 是获取不了对象里面的字段的(除非是一些固定写死的字段) ,但是可以利用反射获取set方法,进行赋值具体可以参考一下代码
/**
*
* @param obj 赋值对象
* @param value 赋值的值
* @throws Exception
*/
public void setMethod(Object obj ,String value) throws Exception
if (obj == null )
return;
Method[] methods = obj.getClass().getMethods();
for (int i = 0; i < methods.length; i++)
Method method = methods[i];
String name = method.getName();
if(name.contains("set"))
method.invoke(obj,value);
Java对象转换成Json字符串是无法获得对应字段名
问题:
代码中已经标注
@JSONField(name = "attrs")
private String abc;
public String getA() {
return abc;
}
public void setA(String abc) {
this.abc = abc;
}
在发送消息的时候,会发现消息接受到的Json消息是abc对应的字段是a。
解决方法:
发现这个问题的时候,大概感觉应该是get和set函数名的为题,将其改成getAbc(),setAbc(),再发送消息的时候,会发现abc对应的字段是attrs了。
原因:
请教大牛,查看了框架代码,并没有看的太明白。
猜测大概是因为Java对象转化为Json字符串的时候,可能会有优先级,会先根据get函数之后的名称,也就是本例中的a去匹配成员变量,若没找到,字段名就是a;若找到了,也就是说若是abc,则能找到,就匹配上attrs,字段名就是attrs了。
以上是关于Java如何获得一个对象中所有带set方法的字段(形成Field对象)?包括父类的。有现成的工具类的主要内容,如果未能解决你的问题,请参考以下文章
说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?
在数据库字段(实体类属性名)带下划线时get和set方法无效