у меня два класса
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Builder;
import lombok.Data;
import lombok.Value;
import javax.annotation.Nullable;
@Data
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class SpecContext {
private Long globalPriceId;
private Long priceId;
private ValidFor validFor;
@JsonCreator
public SpecContext(
@JsonProperty(value = "globalPriceId")
Long globalPriceId,
@JsonProperty(value = "validFor")
ValidFor validFor,
@JsonProperty(value = "priceId")
Long priceId
) {
this.globalPriceId = globalPriceId;
this.validFor = validFor;
this.priceId = priceId;
}
}
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import utils.DateJsonDeserializer;
import utils.DateJsonSerializer;
import lombok.*;
import java.time.LocalDateTime;
@Data
@Value
@JsonIgnoreProperties(ignoreUnknown = true)
public class ValidFor {
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
public static final String START_DATE_TIME = "startDateTime";
public static final String END_DATE_TIME = "endDateTime";
@JsonCreator
public ValidFor(
@JsonDeserialize(using = DateJsonDeserializer.class)
@JsonSerialize(using = DateJsonSerializer.class)
@JsonProperty(value = START_DATE_TIME)
LocalDateTime startDateTime,
@JsonDeserialize(using = DateJsonDeserializer.class)
@JsonSerialize(using = DateJsonSerializer.class)
@JsonProperty(value = END_DATE_TIME)
LocalDateTime endDateTime)
{
this.startDateTime = startDateTime;
this.endDateTime = endDateTime;
}
public static ValidForBuilder builder() {
return new ValidForBuilder();
}
public static class ValidForBuilder {
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
public ValidForBuilder() {
}
public ValidForBuilder startDateTime(LocalDateTime startDateTime) {
this.startDateTime = startDateTime;
return this;
}
public ValidForBuilder endDateTime(LocalDateTime endDateTime) {
this.endDateTime = endDateTime;
return this;
}
public ValidFor build() {
return new ValidFor(startDateTime, endDateTime);
}
}
}
Я использую это в автотесте:
void test() {
SpecContext sp = SpecContext.builder()
.globalPriceId(101928081L)
.priceId(2L)
.validFor(ValidFor.builder().
startDateTime(LocalDateTime.of(2019, 10, 10, 14, 15, 00))
.endDateTime(LocalDateTime.of(2025, 10, 10, 14, 15, 00))
.build())
.build();
Во время компиляции я получил ошибку
java: incompatible types: java.lang.Long cannot be converted to ValidFor
Я не понимаю, почему globalPriceId и priceId пытаются преобразовать в ValidFor?
Я пытался использовать Lombok @Builder для ValidFor, но получил ту же ошибку.
Как я могу решить эту проблему? Спасибо
Я получил это во время сборки (сборка не удалась). Он указал на аннотацию @Builder в классе SpecContext.
Я провел небольшой эксперимент и изменил тип Long для globalPriceId и priceId на тип Integer и получил ошибку java: incompatible types: java.lang.Integer cannot be converted to ValidFor




Lombok @Builder требует, чтобы у вас был конструктор, содержащий все поля в том же порядке, в котором перечислены ваши поля. Вот почему @Builder сгенерирует это для вас, но если вы хотите написать свой собственный конструктор, вы тоже можете это сделать. Вы сделали это здесь, и список аргументов вашего конструктора не совпадает - вы поменяли местами заказы: в вашем конструкторе порядок: [Long globalPriceId, ValidFor validFor, Long priceId], но в ваших полях порядок [Long globalPriceId, Long priceId, ValidFor validFor].
где в вашем коде вы получаете эту проблему?