자바 사용자 정의 주석 및 사용

글 목록
  • 서문
  • 주해 의 사용 장면
  • 수기 주해
  • 주해 류
  • 계산 류
  • 테스트 클래스
  • 출력 결과
  • 머리말
    지난 편 에 서 는 주해 가 무엇 인지 와 그 원리 에 대해 간단 한 소개 (전송 문) 를 했 고 이 손 으로 쓴 것 은 간단 한 주해 예 시 를 실현 했다.
    주해 의 사용 장면
    주해 에 어느 정도 익숙해 진 후에 주 해 는 도대체 무슨 소 용이 있 습 니까?
    자바 홈 페이지 정의:
             ,             ,                   。                 。
    
           ,    :
    --         :                    、Html           。
    -

    주 해 는 설명 한 코드 자체 의 일부분 이 아니다. 즉, 주 해 는 태그 와 유사 하고 그 자 체 를 바 꾸 지 않 으 며 특정한 사물 에 대한 기능 일 뿐이다.개발 자가 Annotation 을 사용 하여 클래스, 방법, Field 등 구성원 을 수식 한 후에 이런 Annotation 은 스스로 효력 이 발생 하지 않 고 개발 자가 해당 하 는 코드 를 제공 하여 Annotation 정 보 를 추출 하고 처리 해 야 합 니 다.이러한 처리 에서 Annotation 을 추출 하고 처리 하 는 코드 를 통칭 하여 APT (Annotation Processing Tool) 라 고 한다.
    수기 주해
    수요: 하나의 계산 류 는 가감 승제 방법 을 가지 고 있 으 며, 실행 방법 이 있 을 때 프로그램 에 이상 이 있 는 지 확인 하고, 있 으 면 이상 정 보 를 표시 합 니 다.
    주해 류
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Check {
    }
    

    계산 류
    계산 클래스 (Numeration) 는 가감 승제, 네 가지 방법 을 정의 합 니 다. 그 중에서 나눗셈 나 누 기 는 0 이 고 여기 서 이상 이 발생 할 수 있 습 니 다.
    public class Numeration {
        //  
        @Check
        public void add() {
            System.out.println("1+1=" + 1 + 1);
        }
        //  
        @Check
        public void subtract() {
            System.out.println("1-1=" + (1 - 1));
        }
        //  
        @Check
        public void multiply() {
            System.out.println("1*2=" + (1 *2));
        }
        //  
        @Check
        public void divide() {
            System.out.println("1/0=" + 1 /0);
        }
    }
    
    

    테스트 클래스
    public class testAnn {
        public static void main(String[] args) {
        	//      
            Numeration numeration = new Numeration();
            //               
            Method[] methods = numeration.getClass().getDeclaredMethods();
    		//  StringBuilder     
            StringBuilder sb = new StringBuilder();
            //error        
            AtomicInteger error = new AtomicInteger();
    
    		//  lambda    methods
            Arrays.asList(methods).forEach((
                    method -> {
                    	//        @Check  
                        if (method.isAnnotationPresent(Check.class)) {
                            try {
                            	//          true
                                method.setAccessible(true);
                                //  numeration   
                                method.invoke(numeration, null);
                            } catch (IllegalAccessException e) {
    //                            e.printStackTrace();
                            } catch (InvocationTargetException e) {
    //                            e.printStackTrace();
    							//        ,  StringBuilder    
                                error.getAndIncrement();
                                sb.append("   ")
                                        .append(method.getClass())
                                        .append("    "+"   :")
                                        .append(e.getCause().getMessage());
                            }
                        }
                    }
                    ));
            sb.append("    "+"     :")
                    .append(error);
            System.out.println(sb);
    
    
        }
    }
    
    

    출력 결과
    1+1=11
    1*2=2
    1-1=0
       class java.lang.reflect.Method/ by zero         :1
    

    간단 한 사용자 정의 주석 구현 ~

    좋은 웹페이지 즐겨찾기