在项目中遇到将一个对象所有属性转化为一个数组的问题,解决办法如下:
- 使用反射根据属性名称获取属性值
private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { System.out.println("属性不存在"); return null; } }
- 获取对象属性,返回一个字符串数组
private String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; for(int i=0;i<fields.length;i++){ fieldNames[i]=fields[i].getName(); } return fieldNames; }
- 通过上面两个步骤,即可将一个对象转化为一个数组
public Object[] getFiledValues(Object o){ String[] fieldNames=this.getFiledName(o); Object[] value=new Object[fieldNames.length]; for(int i=0;i<fieldNames.length;i++){ value[i]=this.getFieldValueByName(fieldNames[i], o); } return value; }