我有以下类结构:
我的Eclipse编译器出现了以下错误:
据我所知,所有泛型类型都扩展自
我们正在努力维护一个接口。这是该接口的原始方法:
基本上,我们正在映射POJO对象,我们一直在使用DozerMapper,但现在,主要架构师想要编译时安全性,而DozerMapper并没有。例如,如果POJO字段得到更新(重命名、删除),我们需要手动更新描述POJO之间映射的xml文件(在映射不是简单一一对应的情况下使用xml文件,例如当POJO字段名称不完全对应时,这种情况经常发生)。
现在,我们有复制类,数百个,每个类都用于映射两个POJO之间的关系。我们试图使用工厂设计模式,根据源类和目标类返回特定的映射器类(实现CopyMapper接口)。
public interface CopyMapper<S, D> {
public D map(S sourceObject);
}
public interface CopyMapperFactory {
public <S, D> CopyMapper<S, D> getMapper(Class<S> sourceClass, Class<D> destinationClass);
}
public class Mapper {
public <S, D> D map(S source, Class<D> destinationClass) {
//This is where I get compile time error
CopyMapper<S, D> copyMapper = mapperFactory.getMapper(source.getClass(), destinationClass);
return copyMapper.map(source);
}
我的Eclipse编译器出现了以下错误:
Type mismatch: cannot convert from CopyMapper<capture#1-of ? extends Object,D> to CopyMapper<S,D>
据我所知,所有泛型类型都扩展自
Object
,所以我不知道问题出在哪里?我们正在努力维护一个接口。这是该接口的原始方法:
<T> T map(Object source, Class<T> destinationClass)
我稍微修改了一下,以便不影响使用该接口的类:
<S, D> D map(S source, Class<D> destinationClass);
基本上,我们正在映射POJO对象,我们一直在使用DozerMapper,但现在,主要架构师想要编译时安全性,而DozerMapper并没有。例如,如果POJO字段得到更新(重命名、删除),我们需要手动更新描述POJO之间映射的xml文件(在映射不是简单一一对应的情况下使用xml文件,例如当POJO字段名称不完全对应时,这种情况经常发生)。
现在,我们有复制类,数百个,每个类都用于映射两个POJO之间的关系。我们试图使用工厂设计模式,根据源类和目标类返回特定的映射器类(实现CopyMapper接口)。
CustomConverter
(当您真正应该使用DozerConverter
)? - Makoto