public @interface MyAnnotation { ...}
- κΈ°λ³Έμ μΌλ‘ μ΄λ Έν μ΄μ μ μ£Όμκ³Ό κ°μ μ·¨κΈμ΄λ€. κ·Έλμ ν΄λμ€ λ‘λ©λμ΄ λ°μ΄νΈμ½λλ₯Ό μ½μ΄ ν΄λμ€ μ λ³΄κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ ν΄λμ€μ λΆμ μ΄λ Έν μ΄μ μ 보λ μ μΈνκ³ μ¬λΌκ°λ€.
- λ©λͺ¨λ¦¬μ μ΄λ
Έν
μ΄μ
μ 보λ ν¨κ» μ¬λ € λ°νμμμλ μ μ§νκ³ μΆλ€λ©΄?
- @Retention μ΄λ Έν μ΄μ μ¬μ©
- @Retention: ν΄λΉ μ΄λ Έν μ΄μ μ μΈμ κΉμ§ μ μ§ν κ²μΈκ°?
- @Target: μ΄λμ μ¬μ©ν μ μλκ°? β ν΄λμ€, νλ, μμ±μ ..
- @Inherit: ν΄λΉ μ΄λ Έν μ΄μ μ νμ ν΄λμ€κΉμ§ μ λ¬ν κ²μΈκ°?
@Retention(RetentionPolicy.RUNTIME) //λ°νμμκΉμ§ μ μ§
@Target({ElementType.TYPE, ElementType.FIELD}) //ν΄λμ€, νλμ μ¬μ©
@Inherited
public @interface MyAnnotation { ...}
-
μ΄λ Έν μ΄μ μλ νλλ₯Ό μΆκ°ν μ μλ€. ex) name, age νλ μΆκ°
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { String name(); int age(); }
μ¬μ© λ°©λ²: μ΄λ Έν μ΄μ μ¬μ©μ νλμ κ°μ λ§€λ² μΆκ°ν΄ μ€μΌ νλ€.@MyAnnotation(name = "chocho", age = 27) public class Book { ... }
-
default ν€μλ
- default ν€μλλ₯Ό μ¬μ©νλ©΄ νλμ κ° μ€μ μ μλ΅ν κ²½μ° νλμ default κ°μ΄ λ€μ΄κ°λ€.
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { String name() default "chowon"; int age() default 27; }
μ¬μ© λ°©λ²@MyAnnotation public class Book { ... }
-
value ν€μλ
- νλλͺ μ valueλ‘ μ€μ νλ©΄ μ΄λ Έν μ΄μ μ κ° μ€μ μ, νλλͺ μ λͺ μν νμκ° μλ€.
- νλκ° νλμΌ λ μ μ©νλ€.
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { String value() default "chocho"; }
μ¬μ© λ°©λ²: νλλͺ μ λͺ μν νμ μλ€.
@MyAnnotation("chovly") public class Book { ...}
-
μ΄λ Έν μ΄μ μ @Retentionμ κΌ λΆμ¬μΌ νλ€.
- λΆμ΄μ§ μμΌλ©΄ λ©λͺ¨λ¦¬μ ν΄λμ€ μ λ³΄κ° μ¬λΌκ° λ μ΄λ Έν μ΄μ μ λ³΄κ° μ μΈλλ€.
// MyAnnotation.class @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { // defaultκ° μμΌλ©΄ μ΄λ Έν μ΄μ μ μΈμ μ§μ κ°μ λ§€λ² μ λ ₯ν΄μΌν¨. μ μ£Όλ©΄ μλ¬ String name() default "chowon"; int age() default 27; // κ°μ νλλ§ λ°μ λ μ μ© String value() default "chocho"; } // Book.class @MyAnnotation public class Book { ... } // Main.class public class Main { public static void main(String[] args) { Arrays.stream(Book.class.getAnnotations()).forEach(System.out::println); } } // result @chapter03.chapter03_2.MyAnnotation(name="chowon", value="chocho", age=27)
-
@Inhertλ₯Ό μ΄λ Έν μ΄μ μ λΆμ΄λ©΄ μμ ν΄λμ€μκ²κΉμ§ μ΄λ Έν μ΄μ μ΄ μ μ©λλ€.
-
getAnnotations() νΈμΆνλ©΄ μκΈ° μμ μκ² λΆμ μ΄λ Έν μ΄μ λΏλ§ μλλΌ, λΆλͺ¨ ν΄λμ€μ λΆμ μ΄λ Έν μ΄μ λ μΆλ ₯λλ€.
// MyAnnotation.class @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { // defaultκ° μμΌλ©΄ μ΄λ Έν μ΄μ μ μΈμ μ§μ κ°μ λ§€λ² μ λ ₯ν΄μΌν¨. μ μ£Όλ©΄ μλ¬ String name() default "chowon"; int age() default 27; // κ°μ νλλ§ λ°μ λ μ μ© String value() default "chocho"; } // Book.class @MyAnnotation public class Book { ... } // MyBook.class @AnotherAnnotation public class MyBook extends Book { } // Main.class public class Main { public static void main(String[] args) { Arrays.stream(MyBook.class.getAnnotations()).forEach(System.out::println); } } // result @chapter03.chapter03_2.MyAnnotation(name="chowon", value="chocho", age=27) @chapter03.chapter03_2.AnotherAnnotation(name="chovly", value="princess bubblegum", age=30)
-
getDeclaredAnnotations()
- λΆλͺ¨ ν΄λμ€λ‘ μμλ°μ μ΄λ Έν μ΄μ μ μ μΈνκ³ μμ μκ²λ§ λΆμ μ΄λ Έν μ΄μ μ‘°ν
Arrays.stream(MyBook.class.getDeclaredAnnotations()).forEach(System.out::println);
-
μ΄λ Έν μ΄μ μμ±μ @Targetμ ElementType.FIELD μΆκ°
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Inherited public @interface MyAnnotation { // defaultκ° μμΌλ©΄ μ΄λ Έν μ΄μ μ μΈμ μ§μ κ°μ λ§€λ² μ λ ₯ν΄μΌν¨. μ μ£Όλ©΄ μλ¬ String name() default "chowon"; int age() default 27; // κ°μ νλλ§ λ°μ λ μ μ© String value() default "chocho"; }
-
κ·Έλ¬λ©΄ μ΄λ Έν μ΄μ μ ν΄λμ€μ νλμ λΆμΌ μ μλ€.
public class Book { private static StringB= "BOOK"; private static final StringC= "BOOK"; private String a = "a"; @AnotherAnnotation // νλμμ μΆκ° public String d = "d"; @MyAnnotation // νλμμ μΆκ° protected String e = "e"; ... }
-
μ‘°ν
Arrays.stream(Book.class.getDeclaredFields()).forEach(f -> { Arrays.stream(f.getAnnotations()).forEach(System.out::println); }); // result @chapter03.chapter03_2.AnotherAnnotation(name="chovly", value="princess bubblegum", age=30) @chapter03.chapter03_2.MyAnnotation(name="chowon", value="chocho", age=27)
-
νΉμ μ΄λ Έν μ΄μ μ λ³΄λ§ κΊΌλΌ μ μλ€.
-
μ΄λ Έν μ΄μ μ νλ κ°μ κΊΌλΌ μ μλ€.
Arrays.stream(Book.class.getDeclaredFields()).forEach(f -> { Arrays.stream(f.getAnnotations()).forEach(a -> { if (a instanceof MyAnnotation) { // νΉμ μ΄λ Έν μ΄μ λ§ μ 보λ₯Ό μΆλ ₯ MyAnnotation myAnnotation = (MyAnnotation) a; System.out.println("name = " + myAnnotation.name()); System.out.println("age = " + myAnnotation.age()); } }); }); // result name = chowon age = 27