如何将有界泛型类型与流和单个对象一起使用



我正在尝试创建一个从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
}

有人能帮我修一下吗。

感谢

您可以通过对集合参数使用相同的泛型类型DE来修复它:

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());
    }
}

相关内容

最新更新