Java 采用反射获取class属性值的实现代码
程序员文章站
2023-12-19 20:31:34
原理:java的反射能够获取属性的名称,然后通过invoke调用类的某个方法。比如有个属性叫username,这个类写了个方法叫getusername,通过invoke调用...
原理:java的反射能够获取属性的名称,然后通过invoke调用类的某个方法。
比如有个属性叫username,这个类写了个方法叫getusername,通过invoke调用getusername这个方法。
代码如下
import java.lang.reflect.field;
import java.lang.reflect.method;
import java.util.hashmap;
import java.util.map;
public class parameterbase
{
/**
* get class field and value map
* @return
*/
public map<string, string> getclassinfo()
{
map<string ,string> fieldsandvalues = new hashmap<string, string>();
field [] fields = this.getclass().getdeclaredfields();
for(int i=0; i< fields.length; i++)
{
field f = fields[i];
string value = getfieldvalue(this ,f.getname()).tostring();
fieldsandvalues.put(f.getname(),value);
}
return fieldsandvalues;
}
private string getfieldvalue(object owner, string fieldname)
{
return invokemethod(owner, fieldname,null).tostring();
}
/**
*
* 执行某个field的getfield方法
*
* @param owner 类
* @param fieldname 类的属性名称
* @param args 参数,默认为null
* @return
*/
private object invokemethod(object owner, string fieldname, object[] args)
{
class<? extends object> ownerclass = owner.getclass();
//fieldname -> fieldname
string methodname = fieldname.substring(0, 1).touppercase()+ fieldname.substring(1);
method method = null;
try
{
method = ownerclass.getmethod("get" + methodname);
}
catch (securityexception e)
{
//e.printstacktrace();
}
catch (nosuchmethodexception e)
{
// e.printstacktrace();
return "";
}
//invoke getmethod
try
{
return method.invoke(owner);
}
catch (exception e)
{
return "";
}
}
}
写一个类user继承于parameterbase并写上一个测试代码
public class user extends parameterbase
{
string username ;
string passworld;
public string getusername()
{
return username;
}
public void setusername(string username)
{
this.username = username;
}
public string getpassworld()
{
return passworld;
}
public void setpassworld(string passworld)
{
this.passworld = passworld;
}
public static void main(string[] args)
{
user u = new user();
u.passworld = "123";
u.username = "aaaaa";
system.out.println(u.getclassinfo().tostring());
}
}
程序输出
{passworld=123, username=aaaaa}
比如有个属性叫username,这个类写了个方法叫getusername,通过invoke调用getusername这个方法。
代码如下
复制代码 代码如下:
import java.lang.reflect.field;
import java.lang.reflect.method;
import java.util.hashmap;
import java.util.map;
public class parameterbase
{
/**
* get class field and value map
* @return
*/
public map<string, string> getclassinfo()
{
map<string ,string> fieldsandvalues = new hashmap<string, string>();
field [] fields = this.getclass().getdeclaredfields();
for(int i=0; i< fields.length; i++)
{
field f = fields[i];
string value = getfieldvalue(this ,f.getname()).tostring();
fieldsandvalues.put(f.getname(),value);
}
return fieldsandvalues;
}
private string getfieldvalue(object owner, string fieldname)
{
return invokemethod(owner, fieldname,null).tostring();
}
/**
*
* 执行某个field的getfield方法
*
* @param owner 类
* @param fieldname 类的属性名称
* @param args 参数,默认为null
* @return
*/
private object invokemethod(object owner, string fieldname, object[] args)
{
class<? extends object> ownerclass = owner.getclass();
//fieldname -> fieldname
string methodname = fieldname.substring(0, 1).touppercase()+ fieldname.substring(1);
method method = null;
try
{
method = ownerclass.getmethod("get" + methodname);
}
catch (securityexception e)
{
//e.printstacktrace();
}
catch (nosuchmethodexception e)
{
// e.printstacktrace();
return "";
}
//invoke getmethod
try
{
return method.invoke(owner);
}
catch (exception e)
{
return "";
}
}
}
写一个类user继承于parameterbase并写上一个测试代码
复制代码 代码如下:
public class user extends parameterbase
{
string username ;
string passworld;
public string getusername()
{
return username;
}
public void setusername(string username)
{
this.username = username;
}
public string getpassworld()
{
return passworld;
}
public void setpassworld(string passworld)
{
this.passworld = passworld;
}
public static void main(string[] args)
{
user u = new user();
u.passworld = "123";
u.username = "aaaaa";
system.out.println(u.getclassinfo().tostring());
}
}
程序输出
复制代码 代码如下:
{passworld=123, username=aaaaa}