기록/JAVA
[JAVA8] 어노테이션의 변화
jeongdalma
2021. 1. 17. 14:45
두가지 큰 변화
- 자바8 부터 어노테이션을 타입 선언부에도 사용할 수 있게 됨
- 자바8 부터 어노테이션을 중복해서 사용할 수 있게 됨
타입 선언 부
- 제네릭 타입
- 변수 타입
- 매개변수 타입
- 예외 타입
- ...
타입에 사용할 수 있으려면
- TYPE_PARAMETER - 타입 변수에만 사용할 수 있다.
@Chicken
@Retention(RetentionPolicy.RUNTIME)
// 이 애노테이션 정보를 언제까지 유지할 것인가
@Target(ElementType.TYPE_PARAMETER)
// 이 애노테이션을 사용할 곳
public @interface Chicken {
}
public static void main(String[] args) {
}
static class FeelsLikeChicken<@Chicken T> {
// <C> 는 타입 파라미터
// print 메소드의 C는 타입
public static <@Chicken C> void print(C c){
}
}
- TYPE_USE - 타입 변수를 포함해서 모든 타입 선언부에 사용할 수 있다.
@Chicken
@Retention(RetentionPolicy.RUNTIME)
// 이 애노테이션 정보를 언제까지 유지할 것인가
@Target(ElementType.TYPE_USE)
// 이 애노테이션을 사용할 곳
public @interface Chicken {
}
public static void main(@Chicken String[] args) throws @Chicken RuntimeException {
List<@Chicken String> names = Arrays.asList("hyunjun");
}
static class FeelsLikeChicken<@Chicken T> {
// <C> 는 타입 파라미터
// print 메소드의 C는 타입
public static <@Chicken C> void print(@Chicken C c){
}
}
중복 사용할 수 있는 어노테이션 만들기
- 중복 사용할 어노테이션 만들기
- 중복 어노테이션 컨테이너 만들기
- 컨테이너 어노테이션은 중복 어노테이션과 @Retention 및 @Target이 같거나 더 넓어야 한다.
@Chicken
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@Repeatable(ChickenContainer.class)
public @interface Chicken {
String value();
}
ChickenContainer
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface ChickenContainer {
Chicken[] value();
}
@Chicken("양념")
@Chicken("마늘")
@Chicken("간장")
@Chicken("후라이드")
public class AppForJava8Annotation {
public static void main(String[] args) {
Chicken[] chickens = App.class.getAnnotationsByType(Chicken.class);
Arrays.stream(chickens).forEach( c ->{
System.out.println(c.value());
});
ChickenContainer chickenContainer = App.class.getAnnotation(ChickenContainer.class);
Arrays.stream(chickenContainer.value()).forEach(c -> {
System.out.println(c.value());
});
}
}
- 스프링 어노테이션 및 메소드
[spring] 스프링 어노테이션 및 메소드 정리
Java Annotation Detail @interface - 어노테이션 클래스에 선언 - 이 파일을 어노테이션 클래스로 선언 - 해당 클래스명을 가진 어노테이션이 생성되었다고 보면 됨! 1 2 3 4 @Target(ElementType.PARAMETER) @Re..
kkambi.tistory.com
더 자바, Java 8 - 인프런
자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합니다. 이
www.inflearn.com