자바 개체 변환 맵

5938 단어 자바실례대상
  • 배경 소개
  • 원리 설명
  • 반사 개념
  • 기능 작용
  • 실현 방식
  • 방법 소개
  • 실례 전시
  • 대상 MAP
  • 전환


    배경 설명
    오늘 프로젝트 를 연구 개발 하 는 과정 에서 이러한 수 요 를 만 났 습 니 다. 통일 처리 류 의 입구 에서 모든 뒤의 처리 절차 에 필요 한 수 치 를 문맥 의 MAP 대상 에 통일 시 켜 야 합 니 다. 그 중에서 지속 적 인 DO 대상 을 포함 합 니 다.만약 에 대상 을 하나하나 옮 겨 다 니 면 이 수 요 를 실현 할 수 있 지만 코드 의 양 이 비교적 많 기 때문에 비교적 합 리 적 인 처리 방식 을 찾 고 있다.나중에 반사 적 인 방식 으로 이 기능 을 실현 할 수 있다 는 것 을 발견 했다.
    원리 설명
    반사 개념
  • 반사 메커니즘 은 운행 상태 에서 임의의 종류 에 대해 이 종류의 모든 속성 과 방법 을 알 수 있다.
  • 임의의 대상 에 대해 임의의 방법 과 속성 을 호출 할 수 있다.

  • 이러한 동적 으로 얻 은 정보 와 동적 호출 대상 의 방법 을 자바 언어의 반사 메커니즘 이 라 고 한다.
    기능 작용
  • 실행 할 때 대상 이 어떤 종류 에 속 하 는 지 동적 으로 가 져 올 수 있 습 니 다
  • 실행 할 때 클래스 의 대상 을 동적 으로 만 들 수 있 습 니 다
  • 실행 시 클래스 의 속성 과 방법 을 얻 을 수 있 습 니 다
  • 실행 시 대상 을 호출 할 수 있 는 모든 방법
  • 동적 대 리 를 실현 할 수 있다
  • 실현 방식
  • Object 류 의 getClass 방법
  • 을 통 해
        Class cla = obj.getClass
  • 대상 인 스 턴 스 방법 으로 대상 획득
  •     Class cla = String.class
  • Class. forName () 방법
  • 을 통 해
        Class cla = Class.forName(xxx.xxx.Student)

    방법 소개
    키워드
    속뜻
    getDeclaredMethods()
    모든 방법 가 져 오기
    getDeclareFields()
    Public, private, protected 를 포함 하지만 부모 클래스 의 설명 필드 는 포함 되 지 않 습 니 다.
    getFields()
    부모 클래스 의 필드 를 포함 하여 모든 공공 (Public) 필드 를 가 져 옵 니 다.
    getDeclaredField(String name)
    Field 대상 을 되 돌려 줍 니 다. 이 대상 은 이 Class 대상 이 표시 하 는 클래스 나 인터페이스의 지정 한 성명 필드 를 반영 합 니 다.
    getReturnType()
    획득 방법의 재생 유형
    getParameterTypes()
    획득 방법의 전송 매개 변수 형식
    getDeclaredMethod ("방법 명", 매개 변수 유형. class,.....)
    특 정 된 방법 을 얻다
    구조 방법 키워드
    속뜻
    getDeclaredConstructors()
    모든 구조 방법 가 져 오기
    getDeclaredConstructor (매개 변수 형식. class,.....)
    특정한 구조 방법 을 얻다
    부모 인터페이스
    속뜻
    getSuperclass()
    부모 클래스 가 져 오기
    getInterfaces()
    실 현 된 인터페이스 가 져 오기
    실례 전시
    인 스 턴 스 반사 인 스 턴 스 링크 참조
    대상 맵 전환
  • 테스트 대상 생 성
  • package source.reflect;
    
    public class TestReflect {
    
        private String no;
    
        private String name;
    
        private int age;
    
    
    
        public TestReflect(String no, String name, int age) {
            super();
            this.no = no;
            this.name = name;
            this.age = age;
        }
    
        public String getNo() {
            return no;
        }
    
        public void setNo(String no) {
            this.no = no;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    
    }
    
  • 반 사 를 통 해 대상 을 지도 로 전환
  • package source.reflect;
    
    import java.lang.reflect.Field;
    import java.util.HashMap;
    import java.util.Map;
    
    public class TestObjToMap {
    
    
        public static Map convertObjToMap(Object obj) throws Exception{
    
            Map map = new HashMap();
    
            Field[] fields = obj.getClass().getDeclaredFields();
    
            for(int i = 0; i < fields.length; i++){
    
                Field field = obj.getClass().getDeclaredField(fields[i].getName());
                field.setAccessible(true);
                Object value = field.get(obj);
    
                map.put(fields[i].getName(), value);
            }
    
            return map;
        }
    
    
        public static void main(String[] args) throws Exception {
    
            TestReflect testReflect = new TestReflect("1", "test", 20);
    
            Map map = convertObjToMap(testReflect);
    
            System.out.println(map);
        }
    
    }
    

    좋은 웹페이지 즐겨찾기