Ваш подход не слишком плох, но необходимо использовать 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.
Я раздал кучу голосов за других пользователей, но просто чтобы дать свои два цента - единственные три аннотации, которые я использую регулярно в development являются основными аннотациями, используемыми непосредственно компилятором:
@Override - отлично подходит для того, чтобы сделать это явным в вашем коде, когда вы переопределяете другой метод. Также есть дополнительное преимущество, заключающееся в том, что он помечается как ошибка компиляции, если вы не переопределяете метод так, как вы думаете (см. Этот другой пост SO ). Этот флаг сообщает компилятору, что вы собираетесь что-то переопределить, поэтому, если вы этого не сделаете (например, вы забыли аргумент в сигнатуре метода), компилятор его поймает.
@Deprecated - Укажите все, что вы ' повторная маркировка как нечто, что не следует использовать с этого момента. Компилятор будет генерировать предупреждения об использовании любых элементов кода, которые вы пометили как устаревшие. В общем, устаревание говорит: «это было здесь в прошлом, но может исчезнуть в будущей версии». Убедитесь, что вы также используете связанный флаг Javadoc «@deprecated» в сочетании с этим, чтобы сообщить людям, что им следует использовать вместо этого.
@SuppressWarnings - Сообщите компилятору, что он должен подавлять определенные предупреждения, которые в противном случае генерировались бы. Это может быть полезно, например, когда вы намеренно хотите использовать устаревшие методы, вы можете заблокировать предупреждение об устаревании. Я часто использую его, чтобы заблокировать всеми любимый "UID сериализации" предупреждение о сериализуемых классах (должны ли вы делать это - это еще одна дискуссия в другой раз). Просто удобно в тех случаях, когда вы знаете, что что-то вы делаете, генерирует предупреждение, но вы на 100% уверены, что это правильное поведение, которое вы хотите.
Посмотрите Sun Annotations Guide и ознакомьтесь с раздел «Аннотации, используемые компилятором». Этим трем дается довольно продолжительное обсуждение.
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.
Here are some Annotations I use in day to day development
Spring:
JUnit:
JPA:
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
они должны быть полезны, вы можете определить их в своих проектах, чтобы лучше сообщать о намерениях:
Junit 4 предоставляет очень полезные аннотации. Вот учебник , иллюстрирующий использование аннотаций для определения тестов.
например,
@Test(expected= IndexOutOfBoundsException.class) public void empty() {
new ArrayList<Object>().get(0);
}
Как Дэн указал ниже, TestNG сделал это изначально.
@Deprecated
@deprecated
из комментариев javadoc для определенного метода, но эта аннотация была хорошим способом сделать ее метаинформацией о самом методе, а не комментарий в документации.) @Test
( JUnit 4 ) Он сделал запись и понимание тестовых файлов немного чище. Кроме того, возможность добавить атрибут ожидаемый
сэкономила несколько строк кода здесь и там.
@Override has my vote. It makes it instantly clear what your method is about and makes your code more readable.
Аннотации Java Concurrency на практике
Очень полезны для точного описания того, является ли ваш код потокобезопасным или нет ...
Лично я смотрел на 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
@Given
позволяет одному тесту JUnit основываться на возвращаемом значении другого теста. Требуется JExample .
Я считаю очень полезными аннотации, связанные с параллелизмом, определенные Брайаном Гетцем в его книге «Параллелизм Java на практике»:
Они особенно полезны, поскольку в FindBugs есть шаблоны, которые их используют.
Jar и документация находятся в свободном доступе по адресу http://www.javaconcurrencyinpractice.com/