擦除错误,同时在具有相似签名的方法中使用泛型类型
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);
}
我想要以下内容:
用户 用户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);
}