Аннотации: методы по сравнению с переменными

Я был всегда уверен (не знайте, почему), что лучше добавить аннотации к переменным, но при просмотре Быть в спящем режиме документа http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection, я заметил, что они склонны аннотировать методы. Так должен я помещать свои аннотации перед методами, как это:

@Entity
public class Flight implements Serializable {
private long id;

@Id @GeneratedValue
public long getId() { return id; }

public void setId(long id) { this.id = id; }
}  

Или это лучше, чтобы сделать это как это:

@Entity
public class Flight implements Serializable {
@Id @GeneratedValue
private long id;

public long getId() { return id; }

public void setId(long id) { this.id = id; }
}  

Или возможно нет никакого различия?

6
задан Mateusz Dymczyk 19 May 2010 в 20:24
поделиться

5 ответов

Как указывает Петер, вам нужно выбрать один стиль и придерживаться его, поскольку стиль, принятый для аннотации @Id , будет использоваться для всего.

Кроме того, это просто вопрос вкуса. Оба варианта работают, поэтому выберите тот, который вам больше нравится. Некоторые люди предпочитают, чтобы Hibernate внедрял через методы, чтобы при необходимости можно было тонко изменить реализацию. Я предпочитаю вводить через поля, так как считаю обременительным открывать все свойства с помощью методов получения / установки (7 строк против 1 строки), когда в 99,9% случаев они будут работать как простые переменные (и в любом случае Я могу переключить стиль аннотации, если / когда мне все равно нужно написать настраиваемую функцию установки).

Между ними нет различий в производительности или функциональности, поэтому выбирайте то, что вам больше нравится (или, что более важно, то, что предпочитают ваша команда / инструменты).

3
ответ дан 17 December 2019 в 00:05
поделиться

С аннотацией @Id есть разница: если она находится в геттере, Hibernate пытается получить / установить все члены класса через их обычные методы получения / установки, в то время как, если он находится в переменной-члене, Hibernate будет напрямую обращаться ко всем переменным-членам.

Другими словами, вы не можете смешивать стили в одном объекте.

2
ответ дан 17 December 2019 в 00:05
поделиться

Это зависит от аннотации.

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

1
ответ дан 17 December 2019 в 00:05
поделиться

Иногда удобно иметь возможность выбирать, куда их поместить, особенно когда поле не открыто публично. Не очень часто встречаются приватные getter/setter, поэтому полезно иметь возможность поместить аннотацию на поле.

Это также иногда дает возможность немного поиграть с внешним/внутренним представлением данных. Вот пример, который немного глуповат, но я использовал подобный трюк несколько раз (здесь и здесь):

@Column(...)
private String email;

public String getAlias() { ... split email and return the part before @ ... }
public void setAlias( String alias ) { ... change the part before the @ ... }

public String getHost() { ... split email and return the part after @ ... }
public void setHost(String host) { ... change the part after the @... }

Вообще говоря, я склонен помещать их на поле, я нахожу код более читабельным. Но в основном это вопрос вкуса. Единственное правило, которое нужно соблюдать - быть последовательным!

1
ответ дан 17 December 2019 в 00:05
поделиться

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

0
ответ дан 17 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

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