Как принять несколько типов в параметре аннотации Java?

Я хотел бы использовать аннотацию в ключевой строке для настройки начального значения для свойства этого ключа. Например,

@NodeProperty(initialValue = "bar") static final String "FOO";

Другой код позже обрабатывает аннотацию, добавляя ключ "FOO" со значением "bar" к определенному хранилищу ключей, если ключ "FOO" еще не существует.

Мое выражение об аннотации:

@Retention(RetentionPolicy.RUNTIME)
@interface NodeProperty {
 long initialValue(); // I want to accept Strings, ints, byte[], etc. here.
}

Но я не знаю тип initialValue раньше времени. Я бы хотел принять все примитивы, строки и массивы этих.

Любые идеи о том, как это сделать?

Редактировать:

К сожалению, похоже, что перегрузка параметра аннотации в настоящее время невозможна. Ответы ниже содержат различные способы обхода.

2 ответа

Примите единственный тип (вероятно, String) и используйте преобразование типа типа, чтобы получить его от того, что вы получили до того, что есть. Подобно тому, как Commons BeanUtils или XWork разрешают регистрировать преобразователи типов для получения из значений формы строки произвольным классам Java.


У вас могут быть разные свойства для разных типов, а затем проверьте, какой из них имеет значение в вашем коде. Поэтому вместо initialValue у вас может быть initialInt, initialString, initial (...). Громоздкий, но единственный способ, которым я могу думать, - всегда использовать значение String и затем анализировать определенный тип из него.

Другим вариантом может быть обратное ваше объявление. Имейте ключ в аннотации и значение в качестве аннотации переменной?

licensed under cc by-sa 3.0 with attribution.