Eya*_*yal 1 java generics maven modelmapper
我在 Java 中面临一个非常奇怪的行为。我得到了两个没有层次连接的不同类:类模板(类型层次结构是对象 -> A -> B -> 模板)和类 TemplateDto(对象 -> TemplateDto)。
我使用 ModelMapper (org.modelmapper.ModelMapper) 在两个类之间进行映射(由于字段名称相同,因此使用默认映射)。
有以下代码:
List<Template> templates = cvService.getTemplates();
List<TemplateDto> resultDtos = new ArrayList<TemplateDto>();
modelMapper.map(templates,resultDtos);
TemplateDto example = resultDtos.get(0);
Run Code Online (Sandbox Code Playgroud)
最后一行抛出:
java.lang.ClassCastException: com.vs.framework.domain.cv.Template cannot be cast to com.vs.framework.dto.cv.TemplateDto
Run Code Online (Sandbox Code Playgroud)
这很奇怪。当我调试本节时,我看到映射后,resultDtos 是一个 List 类型的列表,而不是 List,这让我大吃一惊。
我试图清理我的 tomcat,maven 清理安装,但它仍然发生。
有任何想法吗?
Java 使用类型擦除实现泛型,这意味着运行时代码无法知道您ArrayList的ArrayList<TemplateDto>.
http://modelmapper.org/user-manual/generics/描述了如何使用 aTypeToken来解决列表的这个问题。它应该是这样的:
List<Template> templates = cvService.getTemplates();
Type listType = new TypeToken<List<TemplateDto>>() {}.getType();
List<TemplateDto> resultDtos = modelMapper.map(templates, listType);
TemplateDto example = resultDtos.get(0);
Run Code Online (Sandbox Code Playgroud)