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中如何使用set/get方法

Java对象转换成Json字符串是无法获得对应字段名

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?

在数据库字段(实体类属性名)带下划线时get和set方法无效

C++遍历获得一个类的所有属性名,对该类的实例的所有属性的值 ...~~

java中get和set方法为啥get在前