Какие на самом деле аннотации Scala?

Я не знаю Java, и я начал изучать Scala. Что такое аннотации и для чего они нужны?

3 ответа

Аннотации представляют собой метаданные, прикрепленные к классам / методам / полям, и могут использоваться средами для определения требуемой функциональности, окружающей эти классы / методы / поля.

Общие использования включают в себя:

  1. методы маркировки как методы модульного тестирования и для соответствующей настройки / разрыва (например, JUnit и TestNG)
  2. маркировка классов и полей для сохранения (например, Hibernate)
  3. маркировка классов и полей, которые будут представлены как бины 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 - аннотации должны быть записаны в файле класса компилятором и сохранены виртуальной машиной во время выполнения, чтобы их можно было читать рефлексивно.
Другие вопросы по тегам