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

Ваш подход не слишком плох, но необходимо использовать StringBuffer вместо того, чтобы использовать + знак. + имеет большой недостаток, что новый Строковый экземпляр создается для каждой единственной операции. Чем дольше Ваша строка становится, тем больше издержки. Так использование StringBuffer должно быть самым быстрым путем:

public StringBuffer appendWithDelimiter( StringBuffer original, String addition, String delimiter ) {
        if ( original == null ) {
                StringBuffer buffer = new StringBuffer();
                buffer.append(addition);
                return buffer;
        } else {
                buffer.append(delimiter);
                buffer.append(addition);
                return original;
        }
}

После того, как Вы закончили создавать свою строку просто, называют toString () на возвращенном StringBuffer.

18
задан Jon 3 December 2009 в 22:39
поделиться

12 ответов

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

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

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

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

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

21
ответ дан 30 November 2019 в 05:38
поделиться

I started a weekend project to implement a Programming By Contract framework using method and parameter annotations e.g.

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

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

}

I got stuck at the point of getting param values automatically. Java reflection does not have it. never understood several people's ranting on Java till I came across this limitation.

1
ответ дан 30 November 2019 в 05:38
поделиться

Here are some Annotations I use in day to day development

Spring:

  1. @Autowired - used to Auto wire beans
  2. @Rollback - If set to true it will rollback all DB operations done inside the test case

JUnit:

  1. @Test - Tell that a method is a test case
  2. @Ignore - If you want to ignore any of the test cases
  3. @Before - Code that should run before each test case

JPA:

  1. @Entity - To tell that a POJO is a JPA Entity
  2. @Column - Map the property to DB column
  3. @Id - tell that a java property is Primary key
  4. @EmbeddedId - Used for Composite Primary Keys
  5. @Transient - This property should not be persisted
  6. @Version - Used to manage optimistic locking
  7. @NamedQuery - Used to declare Native SQLs
  8. @OneToMany - One to Many relationship
  9. @ManyToOne - Many to one Relationship

I have included only the most essential ones.You can find details about all the JPA annotations from the following links.

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

http://www.hiberbook.com/

3
ответ дан 30 November 2019 в 05:38
поделиться

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

  • @ThreadSafe
  • @Immutable
  • @ValueObject
  • @BagOfFunctions (например, java .util.Collections)
  • и т. д.
6
ответ дан 30 November 2019 в 05:38
поделиться

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

например,

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

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

3
ответ дан 30 November 2019 в 05:38
поделиться

@Deprecated

Введено в Java 5 .

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

@Test

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

7
ответ дан 30 November 2019 в 05:38
поделиться

@Override has my vote. It makes it instantly clear what your method is about and makes your code more readable.

9
ответ дан 30 November 2019 в 05:38
поделиться

Аннотации Java Concurrency на практике

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

13
ответ дан 30 November 2019 в 05:38
поделиться

Лично я смотрел на 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
ответ дан 30 November 2019 в 05:38
поделиться

@Given

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

3
ответ дан 30 November 2019 в 05:38
поделиться

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

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

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

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

11
ответ дан 30 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: