사용자 도구

사이트 도구


java:annotation

Java Annotation

Meta Annotation

@Inherited

@Inherited
@interface ForEveryone { }
 
@interface JustForMe { }
 
@ForEveryone
@JustForMe
class Superclass { }
 
class Subclass extends Superclass { }

위와 같은 코드에서 @Inherited가 적용된 @ForEveryone 어노테이션을 Superclass에만 지정했지만 자동으로 그 서브클래스인 Subclass에도 적용된 것으로 간주된다. 그에 반해 @JustForMe는 Subclass로 상속되지 않는다.

Annotation 객체 생성하기 instanciation of annotation

어노테이션은 인터페이스다!

  • 어노테이션은 기본적으로 인터페이스이다.
  • 인터페이스는 implements 로 구현 클래스를 만든뒤에 객체를 생성해주면 된다. 그걸로 끝!
  • // 아래와 같은 어노테이션이 있을 때!
    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface LoginUser {
    	boolean required() default true;
    	SomeValue [] someValues() default {};
    }
     
    // 아래와 같이 클래스로 구현한 뒤에 해당 클래스의 인스턴스를 생성하면 된다.
    public static class FakeLoginUser implements LoginUser {
     
    	private boolean requiredValue = true;
     
    	private SomeValue[] someValueValue = {};
     
    	public FakeLoginUser(boolean requiredValue, SomeValue[] someValueValue) {
    		this.requiredValue = requiredValue;
    		this.someValueValue = someValueValue;
    	}
     
    	@Override
    	public Class<? extends Annotation> annotationType() {
    		return LoginUser.class;
    	}
     
    	@Override
    	public boolean required() {
    		return requiredValue;
    	}
     
    	@Override
    	public SomeValue[] someValue() {
    		return someValueValue;
    	}
    }

어노테이션을 직접 지정한 뒤에 Reflection으로 생성하기 - 복잡하므로 하지 말 것

java/annotation.txt · 마지막으로 수정됨: 2018/12/12 16:24 저자 kwon37xi