Я не знаю Java, и я начал изучать Scala. Что такое аннотации и для чего они предназначены?
Каковы Scala аннотации на самом деле?
Ответ 1
Аннотации представляют собой метаданные, привязанные к классам/методам/полям и могут использоваться фреймворками для определения требуемой функциональности, окружающей эти классы/методы/поля.
Общее использование:
- в качестве меток единицы измерения и для соответствующей настройки/срыва (например, JUnit и TestNG).
- Маркировка классов и полей для сохранения (например, Hibernate)
- маркировка классов и полей, которые будут отображаться как JMX beans
Аннотации - это Java-функция, и как таковая доступна в Scala, а также Java.
Ответ 2
Аннотации, в общем, позволяют связать информацию с определением, например. определение класса, метода или переменной. Аннотации могут использоваться компилятором или доступны другим частям вашей программы, например. в Java:
@SuppressWarnings("deprecation")
void useADeprecatedMethod() {
someObj.someDeprecatedMethod();
}
Здесь аннотация @SuppressWarnings
сообщает компилятору не выдавать предупреждение о useADeprecatedMethod's
использовании someDeprecatedMethod
.
Другие применения в мире Java включают добавление информации в класс относительно того, как она сопоставляется с реляционной базой данных для использования с OR-образцами, такими как Hibernate.
В Scala ряд элементов, которые являются ключевыми словами или интерфейсами маркеров в Java, реализованы как аннотации в Scala. например @throws
, @serializable
.
Вот пример, показывающий Scala и Java, работающие вместе с помощью аннотации. Представьте, что мы собираемся определить класс Person
в Scala. Когда мы приступим к использованию Person
в Java, программист Java будет ожидать, что у нас будут методы setName
и getName
, как это соглашение bean в Java. Это может быть достигнуто с помощью аннотации @BeanProperty
:
Класс Person в Scala:
class Person {
@BeanProperty
var name = "Joe Bloggs"
}
В Java:
public void printPerson(Person p) {
// Scala added the getName method for us
System.out.println(p.getName());
}
Ответ 3
Одним из интересных аспектов аннотаций Java является контроль над их сохранением. Когда определен тип аннотации (класс Java, реализующий интерфейс Annotation
), одним из его свойств является его RetentionPolicy
, один из:
- SOURCE - Аннотации должны быть отброшены компилятором.
- CLASS - Аннотации должны записываться в файл класса компилятором, но не должны сохраняться VM во время выполнения.
- RUNTIME - Аннотации должны быть записаны в файле класса компилятором и сохранены VM во время выполнения, поэтому их можно читать с рефлексивностью.