Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Java Concurrency in Practice аннотации

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

Ответ 3

Я считаю, что он concurrency -связанные аннотации, определенные Брайаном Гетцем в его книге "Java Concurrency In Practice", будут очень полезными:

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

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

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

Ответ 4

@Override имеет мой голос. Это мгновенно очищает ваш метод и делает ваш код более удобочитаемым.

Ответ 5

@Test

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

Ответ 6

@Deprecated

Представлено в Java 5.

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

Ответ 7

Лично я смотрел на 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

Ответ 8

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

  • @ThreadSafe
  • @Immutable
  • @ValueObject
  • @BagOfFunctions (например, java.util.Collections)
  • и т.д.

Ответ 9

Junit 4 дает очень полезные аннотации. Вот учебник, иллюстрирующий использование аннотаций для определения тестов.

например.

@Test(expected= IndexOutOfBoundsException.class) public void empty() { 
    new ArrayList<Object>().get(0); 
}

Как отметил Дэн, TestNG сделал это изначально.

Ответ 10

Вот некоторые аннотации, которые я использую в повседневной разработке

Spring:

  • @Autowired - используется для автоматической проводки beans
  • @Rollback. Если установлено значение true, он откатит все операции с БД, выполненные внутри тестового примера.

JUnit:

  • @Test. Скажите, что метод является тестовым примером.
  • @Ignore. Если вы хотите игнорировать любой из тестовых случаев
  • @Before - код, который должен запускаться перед каждым тестовым случаем

JPA:

  • @Entity. Чтобы сказать, что POJO является сущностью JPA.
  • @Column. Сопоставьте свойство с столбцом DB.
  • @Id - укажите, что свойство java является основным ключом
  • @EmbeddedId - используется для составных первичных ключей
  • @Transient. Это свойство не должно сохраняться.
  • @Version. Используется для управления оптимистичной блокировкой.
  • @NamedQuery - используется для объявления собственных SQL-запросов
  • @OneToMany - отношения от одного до многих.
  • @ManyToOne - Отношения "многие к одному"

Я включил только самые важные из них. Вы можете найти информацию обо всех примечаниях JPA из следующих ссылок.

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

http://www.hiberbook.com/

Ответ 11

@Given

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

Ответ 12

Мы начали использовать инструмент времени компиляции 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

Ответ 13

Я начал проект на выходные, чтобы реализовать структуру "Программирование по контракту", используя аннотации методов и параметров, например.

... myMethod (@NotNull String a, @NotNullOrEmpty String b) {

     if ( !validate() ){
         raiseException ..
     }

}

Я застрял в точке получения значений параметров автоматически. В отражении Java этого нет. никогда не понимал нескольких людей, распевавшихся на Java, пока не натолкнулся на это ограничение.