属性的直接访问
直接访问设置好的pojo类
package my;
import java.lang.reflect.Type;
import af.test.Example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test3
{
public static void main(String[] args) throws Exception
{
//从example.jar中加载一个类
Class cls = Class.forName("my.Student");
//创建一个实例
Object obj = cls.newInstance();
//获取字段名
Field idField = cls.getDeclaredField("id");
Field nameField = cls.getDeclaredField("name");
// 示例:取得修饰符,判断是否为 public
int mod = idField.getModifiers();
if(Modifier.isPublic(mod))
{
//相对于 id.set(20190001)
idField.set(obj, 20190001);
}
//相对于 name.set(20190001)
nameField.set(obj, "xiaoming");
int id = (int) idField.get(obj);
// obj.getName();
String name = (String) nameField.get(obj);
System.out.println("** 学号:" + id + ",姓名:" + name);
}
}
pojo转json
package my_0505_特殊类型处理;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.json.JSONObject;
public class Util
{
public static JSONObject pojo2JSON (Object obj) throws Exception
{
// 获取Class信息
Class cls = obj.getClass();
// 取得所有属性的描述
Field[] fields = cls.getDeclaredFields();
// 结果为一个JSONObject
JSONObject json = new JSONObject();
// 从 obj 中取出所有的属性值,放到 json 里
for(Field f : fields)
{
// 属性名
String name = f.getName();
// 换算出 Getter的名字 ,例如 cellphone -> getCellphone()
String getterName = getterName(name);
// 取得 Getter 方法, 如果 Getter方法不存在,则抛出异常
Method getter = cls.getDeclaredMethod(getterName);
// 调用 Getter 方法,得到属性的值
// 注意: Getter方法不带参数,无需传参
// 类比一下普通方式: String cellphone = stu.getCellphone()
Object value = getter.invoke(obj);
// 存到json中
json.put(name, value);
}
return json;
}
public static String getterName(String field)
{
// name -> getName
Character firstChar = Character.toUpperCase(field.charAt(0));
StringBuffer strbuf = new StringBuffer("get" + field);
strbuf.setCharAt(3, firstChar);
return strbuf.toString();
}
}
json转pojo
package my;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.json.JSONObject;
public class Util
{
//JSON -> POJO
public static Object json2POJO (JSONObject json, Class pojoClass) throws Exception
{
//取得所有属性的描述
Field[] fields = pojoClass.getDeclaredFields();
//结果为一个Object
Object pojo = pojoClass.newInstance();
//从 obj 中取得所有的属性值
for(Field f : fields)
{
//属性名
String name = f.getName();
//字段类型,与setter的参数类型相同
Class argType = f.getType();
// 换算出setter的名字, 例如 name -> setName()
String setterName = setterName(name);
//找到Setter
Method setter = pojoClass.getDeclaredMethod(setterName, argType);
//参数的值
Object argValue = null;
if(argType.equals(int.class) || argType.equals(Integer.class))
argValue = json.optInt(name, 0);
else if(argType.equals(long.class) || argType.equals(Long.class))
argValue = json.optLong(name, 0L);
else if(argType.equals(short.class) || argType.equals(Short.class))
argValue = (short) json.optInt(name,0);
else if(argType.equals(byte.class) || argType.equals(Byte.class))
argValue = (byte) json.optInt(name,0);
else if(argType.equals(double.class) || argType.equals(Double.class))
argValue = json.optDouble(name,0);
else if(argType.equals(float.class) || argType.equals(Float.class))
argValue = json.optFloat(name,0);
else if(argType.equals(boolean.class) || argType.equals(Boolean.class))
argValue = json.optBoolean(name,true);
else if(argType.equals(String.class))
argValue = json.optString(name,"");
// 其他类型,如Date,Timestamp类型,暂不处理
//
setter.invoke(pojo, argValue);
}
return pojo;
}
public static String setterName(String field)
{
// "name" -> "setName()"
char firstChar = Character.toUpperCase(field.charAt(0));
StringBuffer strbuf = new StringBuffer("get" + field);
strbuf.setCharAt(3, firstChar);
return strbuf.toString();
}
}