java8 : annotation

This commit is contained in:
haerong22
2021-02-17 17:23:22 +09:00
parent eb1460a4a1
commit fda18e75a0
4 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
package annotation;
import java.util.Arrays;
import java.util.List;
@Chicken("양념")
@Chicken("후라이드")
@Chicken("간장")
public class App {
public static void main(@Pizza String[] args) throws @Pizza RuntimeException {
List<@Pizza String> names = Arrays.asList("hello");
Chicken[] chickens = App.class.getAnnotationsByType(Chicken.class);
Arrays.stream(chickens).forEach(c -> System.out.println(c.value()));
System.out.println("========================================================");
ChickenContainer chickenContainer = App.class.getAnnotation(ChickenContainer.class);
Arrays.stream(chickenContainer.value()).forEach(c -> System.out.println(c.value()));
}
static class FeelsLikeChicken<@Pizza T> {
public static <@Pizza C> void print(@Pizza C c) {
}
}
}

View File

@@ -0,0 +1,11 @@
package annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
//@Target(ElementType.TYPE_PARAMETER) // type_parameter : 제네릭 타입에 @ 사용
@Target(ElementType.TYPE_USE) // type_use : 타입을 사용하는 모든 곳에서 사용가능
@Repeatable(ChickenContainer.class) // 어노테이션 중복 사용할 컨테이너 어노테이션 필요
public @interface Chicken {
String value();
}

View File

@@ -0,0 +1,13 @@
package annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface ChickenContainer {
Chicken[] value();
}

View File

@@ -0,0 +1,11 @@
package annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface Pizza {
}