java獲取對象屬性類型、屬性名稱、屬性值、方法名稱

2018-10-19 16:54 更新

首先需要引入下面兩個反射包文件:

import java.lang.reflect.Method; import java.lang.reflect.Field; 代碼如下:

  1. * 根據(jù)屬性名獲取屬性值
  2. * */
  3. private Object getFieldValueByName(String fieldName, Object o) {
  4. try {
  5. String firstLetter = fieldName.substring(0, 1).toUpperCase();
  6. String getter = "get" + firstLetter + fieldName.substring(1);
  7. Method method = o.getClass().getMethod(getter, new Class[] {});
  8. Object value = method.invoke(o, new Object[] {});
  9. return value;
  10. } catch (Exception e) {
  11. log.error(e.getMessage(),e);
  12. return null;
  13. }
  14. }
  15. /**
  16. * 獲取屬性名數(shù)組
  17. * */
  18. private String[] getFiledName(Object o){
  19. Field[] fields=o.getClass().getDeclaredFields();
  20. String[] fieldNames=new String[fields.length];
  21. for(int i=0;i<fields.length;i++){
  22. System.out.println(fields[i].getType());
  23. fieldNames[i]=fields[i].getName();
  24. }
  25. return fieldNames;
  26. }
  27. /**
  28. * 獲取屬性類型(type),屬性名(name),屬性值(value)的map組成的list
  29. * */
  30. private List getFiledsInfo(Object o){
  31. Field[] fields=o.getClass().getDeclaredFields();
  32. String[] fieldNames=new String[fields.length];
  33. List list = new ArrayList();
  34. Map infoMap=null;
  35. for(int i=0;i<fields.length;i++){
  36. infoMap = new HashMap();
  37. infoMap.put("type", fields[i].getType().toString());
  38. infoMap.put("name", fields[i].getName());
  39. infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
  40. list.add(infoMap);
  41. }
  42. return list;
  43. }
  44. /**
  45. * 獲取對象的所有屬性值,返回一個對象數(shù)組
  46. * */
  47. public Object[] getFiledValues(Object o){
  48. String[] fieldNames=this.getFiledName(o);
  49. Object[] value=new Object[fieldNames.length];
  50. for(int i=0;i<fieldNames.length;i++){
  51. value[i]=this.getFieldValueByName(fieldNames[i], o);
  52. }
  53. return value;
  54. }
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號