это мой код:
@Column(columnName="firstname")
private String firstName;
@Column(columnName="lastname")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
можно ли прочитать значение моей аннотации @Column ( columnName = "xyz123") в другом классе?
Myclass.class.getDeclaredFields()
для получения приватных полейКонечно, это является. Вот пример аннотации:
И пример аннотированного метода:
И пример метода в другом классе, который печатает значение testText:
Не сильно отличается для аннотаций полей, подобных вашему.
Cheerz!
источник
Я никогда этого не делал, но похоже, что Reflection обеспечивает это.
Field
естьAnnotatedElement
и так оно и естьgetAnnotation
. На этой странице есть пример (скопирован ниже); довольно просто, если вы знаете класс аннотации и если политика аннотации сохраняет аннотацию во время выполнения. Естественно, если политика хранения не сохраняет аннотацию во время выполнения, вы не сможете запросить ее во время выполнения.Ответ, который с тех пор был удален (?), Содержал полезную ссылку на руководство по аннотациям, которое может оказаться полезным; Я скопировал ссылку сюда, чтобы люди могли ею пользоваться.
Пример с этой страницы :
источник
Разрабатывая ответ @Cephalopod, если вам нужны все имена столбцов в списке, вы можете использовать этот oneliner:
источник
Хотя все ответы, приведенные до сих пор, совершенно верны, следует также иметь в виду библиотеку отражений Google для более общего и простого подхода к сканированию аннотаций, например
источник
В моем случае вы также можете использовать общие типы, принимая во внимание все сказанное, прежде чем вы сможете сделать что-то вроде:
Помните, что это не будет на 100% равным SomeClass.class.get (...) ();
Но все может получиться ...
источник
В общем случае у вас есть частный доступ к полям, поэтому вы НЕ МОЖЕТЕ использовать getFields в отражении. Вместо этого вы должны использовать getDeclaredFields
Итак, во-первых, вы должны знать, имеет ли ваша аннотация Column сохранение времени выполнения:
После этого вы можете сделать что-то вроде этого:
Очевидно, вы хотели бы что-то сделать с полем - установить новое значение, используя значение аннотации:
Итак, полный код может выглядеть так:
источник
Это должно помочь тем немногим, кто просит универсальный метод (5 лет спустя: p).
В моем примере ниже я извлекаю значение URL-адреса RequestMapping из методов, которые имеют аннотацию RequestMapping. Чтобы адаптировать это для полей, просто измените
к
И замените использование RequestMapping на любую аннотацию, которую вы хотите прочитать. Но убедитесь, что в аннотации есть @Retention (RetentionPolicy.RUNTIME) .
источник
один из способов, которыми я его использовал:
источник