#java #eclipse #lombok #suppress-warnings
#java #eclipse #lombok #подавлять предупреждения
Вопрос:
У меня есть класс с данными lombok @Data
и @AllArgsConstructor(access = AccessLevel.PUBLIC)
:
@Data
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class ResponseVO implements Serializable {
private static final long serialVersionUID = 3461582576096529916L;
@JacksonXmlProperty(localName = "amount", isAttribute = true)
String amount;
}
Когда я использую конструктор
new ResponseVO("22222");
Я получаю предупреждение во всплывающей подсказке при наведении курсора мыши на метод конструктора:
ResponseVO.ResponseVO(String amount)
@SuppressWarnings(value={"all"})
Почему добавлено это предупреждение? без @Data
этого он исчезает
Декомпилировать класс без каких-либо предупреждений:
public class ResponseVO implements Serializable {
private static final long serialVersionUID = 3461582576096529916L;
@JacksonXmlProperty(localName = "amount", isAttribute = true)
String amount;
public String getAmount() {
return this.amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof ResponseVO)) {
return false;
} else {
ResponseVO other = (ResponseVO) o;
if (!other.canEqual(this)) {
return false;
} else {
String this$amount = this.getAmount();
String other$amount = other.getAmount();
if (this$amount == null) {
if (other$amount != null) {
return false;
}
} else if (!this$amount.equals(other$amount)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(Object other) {
return other instanceof ResponseVO;
}
public int hashCode() {
boolean PRIME = true;
byte result = 1;
String $amount = this.getAmount();
int result1 = result * 59 ($amount == null ? 43 : $amount.hashCode());
return result1;
}
public String toString() {
return "ResponseVO(amount=" this.getAmount() ")";
}
public ResponseVO(String amount) {
this.amount = amount;
}
}
Комментарии:
1. Что вы подразумеваете под предупреждением ?
@SuppressWarnings
Аннотация?2. Очевидно, что
@SuppressWarnings
аннотация добавляется Lombok при@Data
добавлении, чтобы избежать появления предупреждений для сгенерированного Lombok кода.3. Весь конструктор добавлен Lombok, или я здесь совершенно неправильно понимаю?
4. Вы могли бы декомпилировать
.class
файл, чтобы увидеть, какие сообщения об ошибках появлялись бы для сгенерированного кода без@SuppressWarnings(value={"all"})
.5. @howlger Я редактирую свой вопрос, никаких предупреждений / ошибок
Ответ №1:
Это не предупреждение, это обычная всплывающая подсказка Eclipse, которая появляется во всех классах, методах и т.д. Эти всплывающие подсказки показывают JavaDoc соответствующего элемента (который в данном случае пуст), а также перечисляют все аннотации к элементу. И вот почему вы видите @SuppressWarnings
: Оно сгенерировано Lombok, чтобы компилятор не выдавал предупреждения в сгенерированном Lombok коде.
Остается вопрос, почему Lombok сгенерировал эти аннотации для подавления. Обычно код Lombok не выдает никаких предупреждений. Однако новые версии языка Java или компилятора могут привести к появлению новых типов предупреждений или новых устареваний. Следовательно, запуск неадаптированной версии Lombok, предназначенной для более новой версии Java, может выдавать предупреждения. Поскольку пользователи не смогут исправить эти предупреждения, они будут подавлены. Кроме того, добавление @SuppressWarnings("all")
также подавляет нестандартные предупреждения, например, от компоновщиков кода или при анализе кода, встроенного в IDE, такие как IntelliJ IDEA.
Комментарии:
1. Это происходит только при добавлении
@Data
, а не другой аннотации lomobok2. Нет, я только что проверил (используя Lombok 1.18.6 и Eclipse 2018-09), что только
@AllArgsConstructor
также показывает это. Если вы взглянете на набор тестов Lombok, вы увидите это повсюду: github.com/rzwitserloot/lombok/tree/master/test/transform /…3.
@AllArgsConstructor
without@Data
не выдает мне предупреждение