-
Java 8 - 8. 애노테이션의 변화공부일기/Java 8 2020. 12. 26. 13:57
애노테이션 관련 변화
-
자바 8부터 애노테이션을 타입 선언부에도 사용할 수 있게 됨.
-
자바 8부터 애노테이션을 중복해서 사용할 수 있게 됨.
타입 선언 부
-
제네릭 타입
-
변수 타입
-
매개변수 타입
-
예외 타입
-
...
타입에 사용할 수 있으려면
-
TYPE_PARAMETER: 타입 변수에만 사용할 수 있다.
-
TYPE_USE: 타입 변수를 포함해서 모든 타입 선언부에 사용할 수 있다.
import java.util.Arrays; import java.util.List; public class App { public static void main(@Chicken String[] args) throws @Chicken RuntimeException { List<@Chicken String> names = Arrays.asList("Something") } static class FeelsLikeChicken<@Chicken T> { public static <Chicken C> void print(@Chicken C c) { System.out.println(c); } } }
중복 사용할 수 있는 애노테이션을 만들기
-
중복 사용할 애노테이션 만들기
-
중복 애노테이션 컨테이너 만들기
-
컨테이너 애노테이션은 중복 애노테이션과 @Retention 및 @Target이 같거나 더 넓어야 한다.
Chicken.java (중복 사용할 애노테이션)
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) @Repeatable(ChickenContainer.class) public @interface Chicken { String value(); }
ChickenContainer.java (중복 애노테이션의 컨테이너 애노테이션)
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE_USE) public @interface ChickenContainer { Chicken[] value(); }
컨테이너 애노테이션으로 중복 애노테이션 참조하기
@Chicken("양념") @Chicken("마늘간장") public class App { public static void main(String[] args) { ChickenContainer chickenContainer = App.class.getAnnotation(ChickenContainer.class); Arrays.stream(chickenContainer.value()).forEach(c -> { System.out.println(c.value()); }); } }
'공부일기 > Java 8' 카테고리의 다른 글
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) 2021.06.21 Java 항해일지 - 13. I/O (0) 2021.02.28 Java 8 - 7. Callable과 Future (0) 2020.12.25 Java 8 - 6. Concurrent 프로그래밍과 Executors (0) 2020.12.24 Java 8 - 5. Date & Time (0) 2020.12.23 -