1

我在 Java 中面临一个非常奇怪的行为。我有两个没有层次结构连接的不同类:类模板(类型层次结构是 Object -> A -> B -> Template)和类 TemplateDto(Object -> 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);

最后一行抛出:

java.lang.ClassCastException: com.vs.framework.domain.cv.Template cannot be cast to com.vs.framework.dto.cv.TemplateDto

这很奇怪。当我调试这一部分时,我看到映射后,resultDtos 是 List 类型的列表,而不是 List,这让我大吃一惊。

我试图清理我的tomcat,maven clean install,但它仍然会发生。

有任何想法吗?

4

1 回答 1

4

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);
于 2015-03-17T17:33:21.783 回答