Аннотация для различных конструкторов в Ломбоке?
у меня есть класс
public class Answer<T> {
private T data;
public Answer(T data) {
this.data = data;
}
public Answer() {
}
public T getData() {
return data;
}
public Answer<T> setData(T data) {
this.data = data;
return this;
}
}
что я хочу упростить с Lombok
.
если я добавлю аннотации @AllArgsConstructor
чем я не вижу конструктор по умолчанию.
@Data
@AllArgsConstructor
public class Answer<T> {
private T data;
public Answer<T> setData(T data) {
this.data = data;
return this;
}
}
возможно ли иметь оба конструктора в Lombok
?
2 ответов
ваш класс эквивалентен:
@Accessors(chain = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Answer<T> {
private T data;
}
хотя, строго говоря, это добавляет toString
, equals
и hashCode
методы все переменные. Это может (и часто делает) вызвать бесконечные циклы. Будьте очень осторожны @Data
.
@Accessors(chain = true)
делает setter
реализация return this
, подробнее здесь.
вы можете добавить несколько примечаний конструктор:
в отличие от большинства других Ломбок аннотации, существование явного конструктора не останавливает эти аннотации от создания собственного конструктора.
отметим, что @Accessors
является экспериментальным, поэтому может быть изменен / переименован в какой-то момент в будущем.
предпочитаю @Builder
to @AllArgsConstructor
как это позволяет только требуются параметры для установки, тогда как конструктор всех аргументов-это все или ничего. Он также генерирует гораздо более читаемый код, считать
new Thing(true, 1, 4, false, 4, 4.0)
и
new Thing.Builder().
setANamnedProperty(true).
setAnotherNamnedProperty(1).
....
build();