자바 매 거 진 이름 에 따라 반사 로 매 거 진 값 가 져 오기

15442 단어 Java
전단 은 매 거 진 이름 에 따라 실시 간 으로 매 거 진 값 을 가 져 와 야 하기 때문에 반 사 를 통 해 매 거 진 데 이 터 를 얻 을 수 있 습 니 다.
(1) 우선 매 거 진 인 터 페 이 스 를 새로 만 들 고 나중에 반사 적 으로 사용 합 니 다.
package com.littlematch.enums.biz;

/**
 *         
 */
public interface Constant {
    /**
     *     
     * @return
     */
    public String desc();

    /**
     *     int
     * @return
     */
    public int val();
}


(2) 다음 에 우 리 는 매 거 진 종 류 를 새로 만 듭 니 다.
이런 형식 으로 같은 업무 유형의 매 거 를 한데 묶 을 수 있 을 뿐만 아니 라 매 거 규칙 의 제한 을 받 지 않 는 다
package com.littlematch.enums;

import com.littlematch.enums.biz.Constant;

/**
 * @ Description:
 * @ Author     :Match
 * @ Date       :   11:02 2018/11/28 0028
 * @Version: $version$
 */
public class SystemEnum {

    /**
     *     
     * @author :Match
     */
    public enum StatusEnum implements Constant {

        YES(" ", 1),
        NO(" ", 2);

        private String desc;
        private int value;
        StatusEnum(String desc, int value){
            this.desc = desc;
            this.value = value;
        }
        @Override
        public String desc() {
            return desc;
        }
        @Override
        public int val() {
            return value;
        }
    }
}

(3) 테스트 클래스 테스트 를 작성 하여 데 이 터 를 얻 을 수 있 는 지
패키지 이름 + 클래스 이름 형식:
  :com.littlematch.enums.base
  :SystemEnum.StatusEnum
package com.littlematch.utils;

import com.littlematch.enums.biz.Constant;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * @ Description:${description}
 * @ Author     :Match
 * @ Date       :   15:09 2018/12/12 0012
 * @Version: $version$
 */
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    
        //     
        String enumType = "SystemEnum.StatusEnum";
        String[] enumArray =enumType.split("\\.");
        String enum2 =enumArray[1];
        //          +  ,           
        String packageName = "com.littlematch.enums.base";
        Class<?> clazz1 = Class.forName(packageName+"."+enumArray[0]);
        Class<? extends Object> cl = clazz1.getClass();

        Class innerClazz[] = clazz1.getDeclaredClasses();
        //     
        for (Class class1 : innerClazz) {
            //        
            String simpleName = class1.getSimpleName();
            if (simpleName.equals(enum2)) {
                //         
                if (class1.isEnum()) {
                    //       
                    Class<Enum> clazz = (Class<Enum>) Class.forName(class1.getName());
                    //        
                    Enum[] enumConstants = clazz.getEnumConstants();
                    //         
                    Method val = clazz.getMethod("val");
                    Method desc = clazz.getMethod("desc");
                    for (Enum enum1 : enumConstants) {
                        //                
                        Object invoke1 = val.invoke(enum1);
                        Object invoke2 = desc.invoke(enum1);
                         System.out.println(invoke1.toString()+":"+invoke2.toString());

                    }
                }
            }
        }
    }
}

좋은 웹페이지 즐겨찾기