Можем ли мы передать значение аннотации во время выполнения? - PullRequest
1 голос
/ 22 октября 2011

Нам нужно создать аннотацию в Java под названием DateFormat. Это займет строковый формат даты, например.

class  User
{
    @Dateformat("MMM/dd/yyyy")
    private Date birthDate;
}

Здесь формат даты статически передается в качестве аргумента аннотации. Есть ли способ, которым мы можем передать этот формат даты во время выполнения, может быть из сессии.

Пожалуйста, помогите.

Ответы [ 3 ]

3 голосов
/ 22 октября 2011

Непосредственно, нет.

Но если у вас есть механизм разрешения свойств, вы можете иметь что-то вроде:

@DateFormat("${birth.date.format}")

И разрешать свойство birth.date.format при анализе аннотации.

1 голос
/ 22 октября 2011

Спецификация языка Java требует, чтобы значение параметра аннотации было постоянным выражением.С сечение 9.6 :

Тип элемента T соизмерим со значением элемента V тогда и только тогда, когда выполняется одно из следующих условий:

  • T - это тип массива E [], а либо:
    • V - это ElementValueArrayInitializer, и каждый ElementValueInitializer (аналог инициализатора переменной в инициализаторе массива) в V соизмерим с E. Или
    • V является ElementValue, соразмерным с T.
  • Тип V совместим по присваиванию (§5.2) с T и, кроме того:
    • Если T является примитивомtype или String, V - это константное выражение ( §15.28 ).
    • V не равно нулю.
    • , если T - это класс, или вызов класса, а Vявляется литералом класса (§15.8.2).
    • Если T является типом перечисления, а V является константой перечисления.

Ключевым элементом в этом случае является первый подпункт второго блока.

0 голосов
/ 22 октября 2011

Нет. То, что вы могли бы сделать, это иметь аннотацию типа

@DateFormat(sessionKey = "foo")

Инструмент / API, который использует аннотацию, извлечет значение атрибута sessionKey и получит шаблон для применения из сеанса, используя заданный ключ атрибута сеанса.

...