import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
// 複数の@Sampleを付与した場合、@Sample.Containerにまとめて格納される
@Repeatable(Sample.Container.class)
public @interface Sample {
String value();
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Container {
Sample[] value();
}
}
import java.util.Arrays;
import java.util.stream.Collectors;
@Sample("a")
@Sample("b")
@Sample("c")
public class Main {
public static void main(String[] args) {
System.out.println(Main.class.getAnnotation(Sample.class)); // null
Sample.Container container = Main.class.getAnnotation(Sample.Container.class);
System.out.println(
Arrays.stream(container.value())
.map(Sample::value)
.collect(Collectors.joining(",")) // a,b,c
);
}
}