我正在尝试设置Dozer以在我的两个实体之间执行复杂的映射。基本上,我希望它将我的percentCompleted
double转换为布尔值,基于值是否为1(100%)。
为此,我创建了以下方法:
private void initEntityMappings()
{
BeanMappingBuilder builder = new BeanMappingBuilder() {
@Override
protected void configure() {
class isCompletedConverter implements CustomConverter {
@Override
public Object convert(Object destination, Object source, Class destClass, Class sourceClass) {
if (source == null) { return null; }
// Make sure the source is a double and the destination is a boolean
if (!(source instanceof Double) || !(destination instanceof Boolean))
throw new MappingException("Source was not a double or destination was not a boolean");
Boolean castedDest = (Boolean)destination;
Double castedSrc = (Double)source;
castedDest = castedSrc == 1;
return castedDest;
}
};
mapping(TaskDetailsViewModel.class, TaskSummaryViewModel.class)
.fields("percentCompleted", "isCompleted", customConverter(isCompletedConverter));
}
};
}
问题在于.fields()
来电抱怨,因为它说找不到isCompletedConverter
的符号。由于这是我第一次参加本地课程,我确信我做错了什么,但我无法确切知道是什么。
答案 0 :(得分:3)
您正在使用令牌 isCompletedConverter
(与isCompletedConverter
或.class
对象的实例相对),该实例在特定时间无效指出你使用它。你包含它的方式有点像强制转换或instanceof
检查,但这与方法调用的语法不同,customConverter
似乎是。
尝试isCompletedConverter.class
或new isCompletedConverter()
,具体取决于customConverter()
正在做什么(我无法从给定代码中判断出来)。如果将本地类从isCompletedConverter
重命名为IsCompletedConverter
以匹配常规Java约定,也可能会更清楚。