java 반사에 근거하여 대상 속성 값을 얻는 방법

3851 단어 java반사대상
본고는 자바가 반사를 바탕으로 대상의 속성 값을 얻는 방법을 실례로 서술하였다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다.
반사 메커니즘을 통해 대상의 속성과 속성 값을 얻을 수 있습니다. 대상에서private는 문제없습니다. 다른 종류에서는 가끔 이상을 보고할 수 있습니다.다음 예는 본 대상에 있다

/**
* Engine entity. @author MyEclipse Persistence Tools
*/
public class Engine implements java.io.Serializable {
 // Fields
 private Long engineId;
 private String engineName;
 private String engineType;
 // Constructors
 /** default constructor */
 public Engine() {
 }
 /** minimal constructor */
 public Engine(Long engineId) {
 this.engineId = engineId;
 }
 public Engine(String engineName, String engineType) {
 this.engineName = engineName;
 this.engineType = engineType;
 }
 /** full constructor */
 public Engine(Long engineId, String engineName, String engineType) {
 this.engineId = engineId;
 this.engineName = engineName;
 this.engineType = engineType;
 }
 // Property accessors
 public Long getEngineId() {
 return this.engineId;
 }
 public void setEngineId(Long engineId) {
 this.engineId = engineId;
 }
 public String getEngineName() {
 return this.engineName;
 }
 public void setEngineName(String engineName) {
 this.engineName = engineName;
 }
 public String getEngineType() {
 return this.engineType;
 }
 public void setEngineType(String engineType) {
 this.engineType = engineType;
 }
public static void main(String[] args) throws Exception {
 Engine m = new Engine(" "," ");
 Class clazz = m.getClass();
 Field[] f = clazz.getDeclaredFields();
 String[] name = field2Name(f);
 Object[] value = field2Value(f, m);
 showNameAndValue(name, value);
 }
 public static void showNameAndValue(String[] name, Object[] value) {
 for (int i = 0; i < name.length; i++) {
  System.out.println("--" + i + "--");
  System.out.println("name:" + name[i]);
  System.out.println("Value:" + value[i]);
  System.out.println("--   --");
 }
 }
 public static String[] field2Name(Field[] f) {
 String[] name = new String[f.length];
 for (int i = 0; i < f.length; i++) {
  name[i] = f[i].getName();
 }
 return name;
 }
 public static Object[] field2Value(Field[] f, Object o) throws Exception {
 Object[] value = new Object[f.length];
 for (int i = 0; i < f.length; i++) {
  value[i] = f[i].get(o);
 }
 return value;
 }
}

프라이빗 속성의 속성 값을 호출하려면 get 방법을 호출해야 합니다. 구체적인 방법은 다음과 같습니다.
field2Value 방법을 다음과 같은 방식으로 바꾸면 다른 종류에서도private의 속성 값을 얻을 수 있습니다

public static Object[] field2Value(Field[] fields, Object o) throws Exception {
 Object[] values = new Object[fields.length];
 Class classType = o.getClass();
 for (int i = 0; i < fields.length; i++) {
  String fieldName = fields[i].getName();
  String firstLetter = fieldName.substring(0, 1).toUpperCase();
  String getMethodName = "get" + firstLetter + fieldName.substring(1);
  Method getMethod = classType.getMethod(getMethodName, new Class[] {});
  values[i] = getMethod.invoke(o, new Object[] {});
 }
 return values;
}

더 많은 자바 관련 내용에 관심이 있는 독자들은 본 사이트의 주제를 볼 수 있습니다: java 날짜와 시간 조작 기교 총집합, Java 그림 조작 기술 요약, 및 Java 운영 DOM 노드 기술 요약.
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기