Какие на самом деле аннотации Scala?
Я не знаю Java, и я начал изучать Scala. Что такое аннотации и для чего они нужны?
3 ответа
Аннотации представляют собой метаданные, прикрепленные к классам / методам / полям, и могут использоваться средами для определения требуемой функциональности, окружающей эти классы / методы / поля.
Общие использования включают в себя:
- методы маркировки как методы модульного тестирования и для соответствующей настройки / разрыва (например, JUnit и TestNG)
- маркировка классов и полей для сохранения (например, Hibernate)
- маркировка классов и полей, которые будут представлены как бины JMX
Аннотации являются функцией Java и доступны как в Scala, так и в Java.
Аннотации, как правило, позволяют связать информацию с определением, например, с определением класса, метода или переменной. Аннотации могут использоваться компилятором или доступны другим частям вашей программы, например, в Java:
@SuppressWarnings("deprecation")
void useADeprecatedMethod() {
someObj.someDeprecatedMethod();
}
Здесь @SuppressWarnings
аннотация говорит компилятору не выдавать предупреждение о useADeprecatedMethod's
использование someDeprecatedMethod
,
Другие применения в мире Java включают в себя добавление в класс информации о том, как он сопоставляется с реляционной базой данных для использования OR-сопоставителями, такими как Hibernate.
В Scala ряд вещей, которые являются ключевыми словами или маркерными интерфейсами в Java, реализованы как аннотации в Scala. например @throws
, @serializable
,
Вот пример, показывающий, как Scala и Java работают вместе с помощью над аннотацией. Представьте, что мы собираемся определить Person
класс в Скале. Когда мы приходим к использованию Person
в Java программист Java будет ожидать от нас setName
а также getName
методы, как это соглашение bean в Java. Это может быть достигнуто с помощью @BeanProperty
аннотация:
Персональный класс в Скале:
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());
}
Один интересный аспект аннотаций Java - контроль над их сохранением. Когда тип аннотации (класс Java, который реализует Annotation
интерфейс), одним из его свойств является его RetentionPolicy
, один из:
- ИСТОЧНИК - аннотации должны быть отброшены компилятором.
- CLASS - аннотации должны быть записаны в файле классов компилятором, но не должны сохраняться виртуальной машиной во время выполнения.
- RUNTIME - аннотации должны быть записаны в файле класса компилятором и сохранены виртуальной машиной во время выполнения, чтобы их можно было читать рефлексивно.