欢迎来到山村网

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

2019-03-09 11:59:43浏览:696 来源:山村网   
核心摘要:  实例如下:  import java.lang.reflect.Field;  import java.lang.reflect.InvocationTargetException;  import java.

  实例如下:

  import java.lang.reflect.Field;

  import java.lang.reflect.InvocationTargetException;

  import java.lang.reflect.Method;

  import java.util.Date;

  

  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();

  }

  }

  }

(责任编辑:豆豆)
下一篇:

高性能路由jcg ac846体验评测

上一篇:

vsftpd文件传输服务器构建方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com