import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
// The @UserPreference annotation:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface UserPreference {
}
// Example class has 4 fields, 3 are tagged with @UserPreference:
class Example {
@UserPreference
String description
; @UserPreference int quantity;
@UserPreference double weight;
Example () {
description = "Tribble";
quantity = 10000;
weight = 0.48;
secret = "Note: Trouble";
}
}
public class Main {
static void printPreferences
(Object o
) { for (Field f
: o.
getClass().
getDeclaredFields()) { if (f.getAnnotation(UserPreference.class) != null) {
try {
System.
out.
println(name
+ "=" + val
); System.
err.
println("Skipping inaccessible field: " + x
); }
}
}
}
public static void main
(String[] args
) { printPreferences(new Example());
}
}
aW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlOwppbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOwppbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwppbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CgovLyBUaGUgQFVzZXJQcmVmZXJlbmNlIGFubm90YXRpb246CkBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCkBUYXJnZXQoRWxlbWVudFR5cGUuRklFTEQpCkBpbnRlcmZhY2UgVXNlclByZWZlcmVuY2Ugewp9CgovLyBFeGFtcGxlIGNsYXNzIGhhcyA0IGZpZWxkcywgMyBhcmUgdGFnZ2VkIHdpdGggQFVzZXJQcmVmZXJlbmNlOgpjbGFzcyBFeGFtcGxlIHsKICAgIEBVc2VyUHJlZmVyZW5jZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICBAVXNlclByZWZlcmVuY2UgaW50IHF1YW50aXR5OwogICAgQFVzZXJQcmVmZXJlbmNlIGRvdWJsZSB3ZWlnaHQ7CiAgICBTdHJpbmcgc2VjcmV0OwogICAgRXhhbXBsZSAoKSB7CiAgICAgICAgZGVzY3JpcHRpb24gPSAiVHJpYmJsZSI7CiAgICAgICAgcXVhbnRpdHkgPSAxMDAwMDsKICAgICAgICB3ZWlnaHQgPSAwLjQ4OwogICAgICAgIHNlY3JldCA9ICJOb3RlOiBUcm91YmxlIjsKICAgIH0KfQoKcHVibGljIGNsYXNzIE1haW4gewoKICAgIHN0YXRpYyB2b2lkIHByaW50UHJlZmVyZW5jZXMgKE9iamVjdCBvKSB7CiAgICAgICAgZm9yIChGaWVsZCBmIDogby5nZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGRzKCkpIHsKICAgICAgICAgICAgaWYgKGYuZ2V0QW5ub3RhdGlvbihVc2VyUHJlZmVyZW5jZS5jbGFzcykgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWwgPSBmLmdldChvKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICI9IiArIHZhbCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHgpIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlNraXBwaW5nIGluYWNjZXNzaWJsZSBmaWVsZDogIiArIHgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgcHJpbnRQcmVmZXJlbmNlcyhuZXcgRXhhbXBsZSgpKTsKICAgIH0KCn0K