您现在的位置: 破洛洛 >> 服务器 >> WEB服务器 >> 正文

java如何反射遍历实体类属性和类型并赋值和获取值

作者:佚名 来源:网络整理 更新时间:2017-5-24
分享到

   实例如下:

  import java.lang.reflect.Field;

  import java.lang.reflect.InvocationTargetException;

  import java.lang.reflect.Method;

  import java.util.Date;

  /**

  * 获取实体类型的属性名和类型

  * @param model 为实体类

  * @author kou 为传入参数

  */

  public class GetModelNameAndType

  {

  public static void testReflect(Object model) throws SecurityException,

  NoSuchMethodException, IllegalArgumentException,

  IllegalAccessException, InvocationTargetException, InstantiationException

  {

  // 获取实体类的所有属性,返回Field数组

  Field[] field = model.getClass().getDeclaredFields();

  // 获取属性的名字

  String[] modelName = new String[field.length];

  String[] modelType = new String[field.length];

  for (int i = 0; i < field.length; i++)

  {

  // 获取属性的名字

  String name = field[i].getName();

  modelName[i] = name;

  // 获取属性类型

  String type = field[i].getGenericType().toString();

  modelType[i] = type;

  //关键。。。可访问私有变量

  field[i].setAccessible(true);

  //给属性设置

  field[i].set(model, field[i].getType().getConstructor(field[i].getType()).newInstance("kou"));

  // 将属性的首字母大写

  name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1)

  .toUpperCase());

  if (type.equals("class java.lang.String"))

  {

  // 如果type是类类型,则前面包含"class ",后面跟类名

  Method m = model.getClass().getMethod("get" + name);

  // 调用getter方法获取属性值

  String value = (String) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:" + value);

  }

  }

  if (type.equals("class java.lang.Integer"))

  {

  Method m = model.getClass().getMethod("get" + name);

  Integer value = (Integer) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:" + value);

  }

  }

  if (type.equals("class java.lang.Short"))

  {

  Method m = model.getClass().getMethod("get" + name);

  Short value = (Short) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:" + value);

  }

  }

  if (type.equals("class java.lang.Double"))

  {

  Method m = model.getClass().getMethod("get" + name);

  Double value = (Double) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:" + value);

  }

  }

  if (type.equals("class java.lang.Boolean"))

  {

  Method m = model.getClass().getMethod("get" + name);

  Boolean value = (Boolean) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:" + value);

  }

  }

  if (type.equals("class java.util.Date"))

  {

  Method m = model.getClass().getMethod("get" + name);

  Date value = (Date) m.invoke(model);

  if (value != null)

  {

  System.out.println("attribute value:"

  + value.toLocaleString());

  }

  }

  }

  }

  public static void main(String[] args)

  {

  try

  {

  testReflect(new VO());

  }

  catch (SecurityException e)

  {

  e.printStackTrace();

  }

  catch (IllegalArgumentException e)

  {

  e.printStackTrace();

  }

  catch (NoSuchMethodException e)

  {

  e.printStackTrace();

  }

  catch (IllegalAccessException e)

  {

  e.printStackTrace();

  }

  catch (InvocationTargetException e)

  {

  e.printStackTrace();

  }

  catch (InstantiationException e)

  {

  e.printStackTrace();

  }

  }

  }

转载请注明:破洛洛(谢谢合作)
网友评论: