我正在尝试创建一个从DTO到Entity和从Entity到DTO的有界泛型类型的转换器。
public interface GenericConverter<D extends IDTO, E extends IEntity> {
public E createFrom(D dto);
public D createFrom(E entity);
default List createFromEntities(final Collection<? extends IEntity> entities) {
return entities.stream()
.map(this::createFrom)
.collect(Collectors.toList());
}
default List createFromDtos(final Collection<IDTO> dtos) {
return dtos.stream()
.map(this::createFrom)
.collect(Collectors.toList());
}
这是一段代码,其中IDTO和IEntity是两个标记接口。所以我不想允许任何对象只继承这些接口。单个转换工作正常,但对于流,它会给出以下错误。
The type GenericConverter<D,E> does not define createFrom(IDTO) that is applicable here
The type GenericConverter<D,E> does not define createFrom(capture#1-of ? extends IEntity) that is applicable here
}
有人能帮我修一下吗。
感谢
您可以通过对集合参数使用相同的泛型类型D
和E
来修复它:
public interface GenericConverter<D extends IDTO, E extends IEntity>
{
E createFrom(D dto);
D createFrom(E entity);
default List<D> createFromEntities(final Collection<E> entities)
{
return entities.stream()
.map(this::createFrom)
.collect(Collectors.toList());
}
default List<E> createFromDtos(final Collection<D> dtos)
{
return dtos.stream()
.map(this::createFrom)
.collect(Collectors.toList());
}
}