I'm using the immutables library to create immutable objects from interfaces. However, I can't find a way to make generated classes extend one another in order to make them polymorphic.
Consider this code:
@Value.Immutable
@ImmutableStyle
@JsonSerialize
public interface AbstractAdvert {
String getAdvertName();
@Nullable
String getAdvertRef();
AdvertPrice getPrice();
AdvertProvider getProvider();
@Value.Default
default Boolean getBillsIncluded() {
return false;
}
@Value.Immutable
@ImmutableStyle
@JsonSerialize
interface AbstractStudioAdvert extends AbstractAdvert {
}
}
This will generate two classes: Advert and StudioAdvert.
I'd like to have methods elsewhere that take List<Advert> as a parameter but it also accepts List<StudioAdvert> hence I need the polymorphism here.
TLDR: The above code doesn't make generated StudioAdvert extend Advert. I'd like them to have that relationship though.
Any suggestions appreciated.
EDIT 1
In my use case, let's say I have a List<StudioAdvert> and a List<RoomAdvert> that I would like to pass to the same function for processing. The following method does not work at the moment if I use List<Advert> or List<AbstractAdvert> as method's parameter.
public static ProcessedResult processResult(List<AbstractAdvert> adverts) {
...
}
