擦除错误,同时在具有相似签名的方法中使用泛型类型

Erasure error, while using generic types in methods with similar signature

我想要以下内容:

用户 用户Dto 用户映射器

userDto = userMapper.map(user);
user = userMapper.map(userDto);

我的想法是 class 类似于:

public interface EntityMapper<E, D> {
    E map(D dto);
    D map(E entity);
}

但我收到以下错误:

'map(D)' clashes with 'map(E)'; both methods have same erasure

我如何在没有 2 个函数映射的情况下实现这一点?

此代码可能对您有所帮助:

import org.mapstruct.*;
import org.springframework.stereotype.Component; 

@Component
@Mapper(componentModel = "spring", builder = @Builder(disableBuilder = true))
public abstract class EntityMapper{

    public abstract E map(D dto);
    public abstract D map(E entity);
 }

问题是 map(D dto)map(E entity) 本质上具有相同的签名。 map(Object dto)map(Object entity)。而且当你调用entityMapper.map(something);时,java无法判断调用的是哪个方法 因此,您需要按如下方式定义您的方法:

public abstract class EntityMapper{
   public abstract <E extends AbstractEntity, D extends AbstractDto> E map(D dto);
   public abstract <E extends AbstractEntity, D extends AbstractDto> D map(E entity);
}

这也应该有效:

public interface EntityMapper<D extends AbstractDTO, E extends AbstractEntity> {
    E map(D dto);
    D map(E entity);
}