자바 사용자 정의 실행 시 주석
7360 단어 자바
@Retention
(RetentionPolicy. RUNTIME) 는 실행 시 보류 하 는 주 해 를 표시 합 니 다.우 리 는 실행 할 때 자바 반사 체 제 를 통 해 주석 정 보 를 얻 을 수 있 습 니 다.실행 시 프로세서 라 이브 러 리 설명 (java. lang. reflect. AnotatedElement)
인터페이스 AnnotatedElement 는 프로그램의 주석 요 소 를 표시 하고 반사 로 읽 을 수 있 습 니 다.인터페이스 에서 돌아 오 는 모든 주 해 는 가 변 적 이지 않 고 직렬 화 될 수 있 으 며 인터페이스 방법 으로 돌아 오 는 배열 은 수정 할 수 있 으 나 원래 의 주해 에 영향 을 주지 않 습 니 다.인터페이스의 getAnnotations ByType (Class) 과 getDeclared Annotations ByType (Class) 방법 은 중복 주 해 를 지원 합 니 다.
사용자 정의 실행 기 설명 예
항목 주소
대상 이 class 인 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by victor on 2017/5/30.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassInfo {
String name() default "";
String description() default "";
}
목표 방법 에 대한 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by victor on 2017/5/30.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodInfo {
String name() default "";
String description() default "";
}
대상 이 속성 인 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Created by victor on 2017/5/30.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldInfo {
String name() default "";
String description() default "";
}
주해 처리 도구
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Created by victor on 2017/5/30.
*/
public class InfoUtil {
public static void HandleInfo(Class> clazz){
if(clazz.isAnnotationPresent(ClassInfo.class)) {
ClassInfo classInfo = clazz.getAnnotation(ClassInfo.class);
System.out.println("classInfo:
"+classInfo.name()+"::"+classInfo.description());
}
Method[] methods = clazz.getDeclaredMethods();
for(Method item: methods){
if(item.isAnnotationPresent(MethodInfo.class)){
MethodInfo methodInfo = item.getAnnotation(MethodInfo.class);
System.out.println("methodInfo:
"+methodInfo.name()+"::"+methodInfo.description());
}
}
Field[] fields = clazz.getDeclaredFields();
for(Field item: fields){
if(item.isAnnotationPresent(FieldInfo.class)){
FieldInfo fieldInfo = item.getAnnotation(FieldInfo.class);
System.out.println("methodInfo:
"+fieldInfo.name()+"::"+fieldInfo.description());
}
}
}
}
실체 클래스 demo
/**
* Created by victor on 2017/5/30.
*/
@ClassInfo(name = "DemoClass",description = "A demo class for annotation")
public class Demo {
@FieldInfo(name = "DemoField",description = "A demo field for annotation")
private String name;
@MethodInfo(name = "DemoMethod", description = "A demo method for annotation")
public String getName() {
return name;
}
}
테스트 클래스
/**
* Created by victor on 2017/5/30.
*/
public class Test {
public static void main(String[] args){
InfoUtil.HandleInfo(Demo.class);
}
}
classInfo:
DemoClass::A demo class for annotation
methodInfo:
DemoMethod::A demo method for annotation
methodInfo:
DemoField::A demo field for annotation
참고 자료: 자바 공식 튜 토리 얼
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.