Полезные аннотации Java - PullRequest
       41

Полезные аннотации Java

18 голосов
/ 04 декабря 2009

Мне интересно узнать, точно какие аннотации Java люди считают наиболее полезными во время разработки. Это не обязательно должно ограничиваться основным Java API, вы можете включать аннотации, которые вы нашли в сторонних библиотеках, или аннотации, которые вы разработали сами (убедитесь, что вы включили ссылку на источник).

Я действительно заинтересован в общих задачах по разработке вместо того, чтобы знать, почему @ManyToOne(optional=false) в JPA является удивительным ...

Включите аннотацию и описание того, почему это полезно для общего развития.

Ответы [ 14 ]

21 голосов
/ 04 декабря 2009

Я выдал кучу голосов для других пользователей, но просто для того, чтобы дать моим двум центам только три аннотации, которые я использую с какой-либо регулярностью в разработке, это основные аннотации, используемые непосредственно компилятором:

@ Override - Отлично подходит для того, чтобы сделать это явным в вашем коде, когда вы переопределяете другой метод. Также имеет дополнительное преимущество пометки как ошибки компиляции, если вы не переопределяете метод так, как вы думаете (см. Этот другой пост SO ). Этот флаг информирует компилятор о том, что вы собираетесь что-то переопределить, поэтому, если вы этого не сделаете (например, вы забудете аргумент в сигнатуре метода), компилятор его перехватит.

@ Устаревший - Укажите, что вы отмечаете как что-то, что не должно использоваться с этого момента. Компилятор сгенерирует предупреждения для использования любых элементов кода, которые вы пометили как устаревшие. В целом, в устарении говорится, что «это было здесь раньше, но в будущей версии это может исчезнуть». Убедитесь, что вы также используете связанный флаг "@deprecated" Javadoc вместе с этим, чтобы сообщить людям, что им следует использовать вместо этого.

@ SuppressWarnings - Скажите компилятору подавить определенные предупреждения, которые он мог бы генерировать в противном случае. Это может быть полезно для таких вещей, как когда вы намеренно хотите использовать устаревшие методы, вы можете заблокировать предупреждение об устаревании. Я часто использую его, чтобы заблокировать всеобщее любимое предупреждение «Serialization UID» для сериализуемых классов (независимо от того, должны ли вы сделать это еще один спор в другой раз). Просто удобно в тех случаях, когда вы знаете, что то, что вы делаете, генерирует предупреждение, но вы на 100% уверены, что вам нужно именно такое поведение.

Посмотрите Руководство по аннотациям Sun и ознакомьтесь с разделом "Аннотации, используемые компилятором". Эти трое обсуждаются довольно долго.

13 голосов
/ 04 декабря 2009

Практический Java-параллелизм аннотации

Очень полезно для точного описания того, насколько ваш код безопасен для потоков ...

11 голосов
/ 22 апреля 2010

Я считаю, что связанные с параллелизмом аннотации, определенные Брайаном Гетцем в его книге «Параллелизм Java на практике», очень полезны:

  • @ GuardedBy
  • @ Immutable
  • @ NotThreadSafe
  • @ ThreadSafe

Они особенно полезны, так как FindBugs имеет шаблоны, которые их используют.

Банку и документацию можно свободно получить по адресуhttp://www.javaconcurrencyinpractice.com/

9 голосов
/ 04 декабря 2009

@ Override имеет мой голос. Это сразу дает понять, о чем ваш метод, и делает ваш код более читабельным.

7 голосов
/ 04 декабря 2009

Лично я рассматривал JSR303 Bean Validation и предоставляемые им аннотации, я думаю, они станут более распространенными, пока есть только несколько реализаций JSR, но они предоставляют аннотации, такие как как:

@NotNull private String name;
@NotNull @Size(min = 5, max = 30) private String address;

Подробнее здесь: http://jcp.org/en/jsr/detail?id=303

7 голосов
/ 04 декабря 2009

@Deprecated

Введено в Java 5 .

  • Это помогает разработчикам увидеть, что не рекомендуется в IDE. (До этого большинство IDE все еще могли извлекать @deprecated из комментариев javadoc для конкретного метода, но эта аннотация была хорошим способом сделать его мета-информацией о самом методе, а не комментарием в документации.)
  • Он также используется компилятором для вывода предупреждений при использовании устаревших методов.
7 голосов
/ 04 декабря 2009

@Test

( JUnit 4 ) Это делает написание и понимание тестовых файлов немного чище. Кроме того, возможность добавления атрибута expected сохранила несколько строк кода здесь и там.

6 голосов
/ 04 декабря 2009

это должно быть полезно, вы можете определить их в своих проектах, чтобы лучше донести намерения:

  • @ THREADSAFE
  • @ Неизменный
  • @ ValueObject
  • @ BagOfFunctions (например, java.util.Collections)
  • и т.д.
3 голосов
/ 16 августа 2014

Мы начали использовать инструмент времени компиляции под названием lombok (http://projectlombok.org/).. Вы аннотируете классы, членов и т. Д., А методы автоматически генерируются во время компиляции. Это значительно повышает производительность и экономит сотни строк утомительного кодирования.

Хотите, чтобы метод toString() генерировался автоматически? Просто аннотируйте свой класс с помощью @ToString.

Устали от необходимости определять геттеры и сеттеры для ваших членов? Аннотируйте свой класс с помощью @Getter и / или @Setter, и они автоматически добавляются.

Хотите иметь регистратор SLF4J для записи? @Slf4j создает для вас личный статический финальный логгер.

@Data
public class MyBean {
    // Getters for x and y, setter for y and constructor with x as arg automatically created!
    // toString() and hashCode() methods are there too!
    private final int x;
    private int y;
}

.

@Slf4j
public class SomeClass {
    public void doSomething() {
        log.info("I've got log.");
    }
}

Настроить его очень просто: просто добавьте provided maven-зависимость. Также есть крошечный плагин Eclipse / IntelliJ.

Проверьте полный список функций здесь: http://projectlombok.org/features/index.html

3 голосов
/ 07 декабря 2009

@Given

позволяет одному тесту JUnit использовать возвращаемое значение другого теста. Требуется JПример .

...