Класс MyEntity расширяет базовый класс. Оба имеют аннотацию @SuperBuilder ломбок (версия 1.18.34).
@Getter
@Setter
@SuperBuilder
@ToString(onlyExplicitlyIncluded = true)
@EqualsAndHashCode
public abstract class BaseEntity {
public abstract SomeType getSomeType();
}
@Value
@SuperBuilder
@ToString(onlyExplicitlyIncluded = true)
@EqualsAndHashCode(callSuper = true)
public class MyEntity extends BaseEntity {
@Override
public SomeType getSomeType() {
return SomeType.SOMETHING;
}
}
Если я попытаюсь сопоставить что-то с MyEntity вот так
someItems.stream()
.map(item -> MyEntity.builder().build())
.toList();
Тип возвращаемого значения — List. Почему компилятор не может определить тип здесь? Если я посмотрю на метод build(), я увижу общий общедоступный абстрактный C build().
В качестве обходного пути я могу перенести сборку в отдельный метод. .
private MyEntity getBuild(SomeItem item) {
return MyEntity.builder().build();
}
List myEntities = someItems.stream() // works
.map(item -> getBuild(item))
.toList();
РЕДАКТИРОВАТЬ
Я взял приведенные мной классы в качестве примера и создал этот пример метода. Тип списка карт — List
.public static List doSomething(List strings)
{
List list = strings.stream().map(s -> MyEntity.builder().build()).toList();
return (List) list;
}
Взгляните на это:
public static List creatingTheEntityFirst() {
MyEntity build = MyEntity.builder().build();
return List.of(build);
}
public static List creatingEntityInAList(List strings) {
List build = List.of(MyEntity.builder().build()); // type is List
return build; // this would error because provided is List
return List.of(MyEntity.builder().build()); // however this works
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... perbuilder
Потоковая карта классов с помощью Lombok SuperBuilder ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Наследование Lombok @SuperBuilder с дженериками всегда показывает «захват?»
Anonymous » » в форуме JAVA - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-