자바 8부터
추가된 @Target(ElementType)
예시
public static void main(String[] args) {
}
static class test<@Chicken T>
{
//함수의 매개변수 부분에는 애노테이션을 붙일수가 없다
public static <@Chicken C> void print(C c) {
System.out.println(c);
}
}
@Chicken
public class enotation {
public static void main(@Chicken String[] args) throws @Chicken RuntimeException{
List<@Chicken String> list = Arrays.asList("woonsik");
}
static class test<@Chicken T>
{
public static <@Chicken C> void print(@Chicken C c) {
System.out.println(c);
}
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@Repeatable(ChickenContainer.class)
//여러 애노테이션을 감싸고 있을 컨테이너 애노테이션 타입을 매개변수로 선언
public @interface Chicken {
String value(); //치킨의 정보를 담는 변수
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface ChickenContainer {
//자신이 가지고있을 애노테이션의 배열을 갖고 있어야한다
Chicken[] value();
}
@Chicken("앙념")
@Chicken("후추")
@Chicken("후라이드")
@Chicken("마늘")
@Chicken("마라")
public class ChickenMain {
public static void main(String[] args) {
//애노테이션 타입으로 가져오는 방법
Chicken[] chickens = enotation.class.getAnnotationsByType(Chicken.class);
Arrays.stream(chickens).forEach(s-> {
System.out.println(s.value());
});
//애노테이션 컨테이너 타입으로 가져오는 방법
ChickenContainer chickenContainer = enotation.class.getAnnotation(ChickenContainer.class);
Arrays.stream(chickenContainer.value()).forEach(s -> {
System.out.println(s.value());
});
}}
//출력
앙념
후추
후라이드
마늘
마라
---
앙념
후추
후라이드
마늘
마라