Я использую Java https://immutables.github.io/ и у меня возникли проблемы с базовым классом и один раз настраивает его поля.
У меня есть неизменяемые объекты, использующие Шаблон яйца для совместного использования полей, например:
interface HousingBase {
int streetNumber();
String streetName();
int zip();
}
@Value.Immutable
interface House extends HousingBase {
long lotSize();
}
@Value.Immutable
interface Apartment extends HousingBase {
int apartmentNumber();
}
Проблема заключается в том, что мой код создает эти объекты из набора полей HousingBase
, и я получаю дубликат кода, например:
public ImmutableHouse toHouse(HouseLocation location) {
return ImmutableHouse.builder()
.setStreetNumber(location.number())
.setStreetName(location.street())
.setZip(location.zip())
.setLotSize(location.size())
.build();
}
public ImmutableApartment toHouse(ApartmentLocation location) {
return ImmutableApartment.builder()
.setStreetNumber(location.number())
.setStreetName(location.street())
.setZip(location.zip())
.setApartmentNumber(location.complex())
.build();
}
Что я действительно хочу, так это какой-то способ установить поля HousingBase
, чтобы они были определены один раз. Например:
public ImmutableApartment toHouse(ApartmentLocation location) {
return setBaseFields(ImmutableApartment.builder(), location)
.setApartmentNumber(location.complex())
.build();
}
private Builder setBaseFields(Builder builder, Location location) {
return builder
.setStreetNumber(location.number())
.setStreetName(location.street())
.setZip(location.zip())
}
Но я не могу понять, как это работает или возможно ли это с этой библиотекой.