import java.lang.annotation.*;
enum NoType {;}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface A {
Class<?> data() default NoType.class; // field from B
int dataA() default 0; // field from C
String dataB
() default ""; // field from C }
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface D {
A[] value() default {};
}
class Foo {}
class Bar {}
class Example {
@D({
@A(data = Bar.class),
@A(dataA = 5, dataB = "Bla"),
@A(data = Foo.class)
})
for (A a
: Example.
class.
getMethod("main",
String[].
class) .getAnnotation(D.class).value()) {
if (a.data() != NoType.class) {
System.
out.
printf("B(%s)%n", a.
data()); } else {
System.
out.
printf("C(dataA = %d, dataB = \"%s\")%n",
a.dataA(), a.dataB());
}
}
}
}
aW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLio7CgplbnVtIE5vVHlwZSB7O30KCkBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCkBUYXJnZXQoRWxlbWVudFR5cGUuTUVUSE9EKQpAaW50ZXJmYWNlIEEgewogICAgQ2xhc3M8Pz4gZGF0YSgpICBkZWZhdWx0IE5vVHlwZS5jbGFzczsgLy8gZmllbGQgZnJvbSBCCiAgICBpbnQgICAgICBkYXRhQSgpIGRlZmF1bHQgMDsgICAgICAgICAgICAvLyBmaWVsZCBmcm9tIEMKICAgIFN0cmluZyAgIGRhdGFCKCkgZGVmYXVsdCAiIjsgICAgICAgICAgIC8vIGZpZWxkIGZyb20gQwp9CgpAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQpAVGFyZ2V0KEVsZW1lbnRUeXBlLk1FVEhPRCkKQGludGVyZmFjZSBEIHsKICAgIEFbXSB2YWx1ZSgpIGRlZmF1bHQge307Cn0KCmNsYXNzIEZvbyB7fQpjbGFzcyBCYXIge30KCmNsYXNzIEV4YW1wbGUgewogICAgQEQoewogICAgICAgIEBBKGRhdGEgPSBCYXIuY2xhc3MpLAogICAgICAgIEBBKGRhdGFBID0gNSwgZGF0YUIgPSAiQmxhIiksCiAgICAgICAgQEEoZGF0YSA9IEZvby5jbGFzcykKICAgIH0pCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBmb3IgKEEgYSA6IEV4YW1wbGUuY2xhc3MuZ2V0TWV0aG9kKCJtYWluIiwgU3RyaW5nW10uY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEQuY2xhc3MpLnZhbHVlKCkpIHsKICAgICAgICAgICAgaWYgKGEuZGF0YSgpICE9IE5vVHlwZS5jbGFzcykgewogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIkIoJXMpJW4iLCBhLmRhdGEoKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiQyhkYXRhQSA9ICVkLCBkYXRhQiA9IFwiJXNcIiklbiIsCiAgICAgICAgICAgICAgICAgICAgYS5kYXRhQSgpLCBhLmRhdGFCKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9