Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orika:java.lang.ClassCastException:java.lang.Object无法转换为mapper.Name_Java_Orika - Fatal编程技术网

Orika:java.lang.ClassCastException:java.lang.Object无法转换为mapper.Name

Orika:java.lang.ClassCastException:java.lang.Object无法转换为mapper.Name,java,orika,Java,Orika,在映射数组和列表的元素部分,我正在编写示例orika mapper文档 下面是我创建mapperFacade并将Person对象转换为PersonDto- 名称类定义- public class Name { private String first; private String last; private String fullName; // getters/setters public Name()

在映射数组和列表的元素部分,我正在编写示例orika mapper文档

下面是我创建mapperFacade并将
Person
对象转换为
PersonDto
-

名称类定义-

    public class Name {
        private String first;
        private String last;
        private String fullName;
        // getters/setters

        public Name() {

        }

        public Name(String first, String last, String fullName) {
            this.first = first;
            this.last = last;
            this.fullName = fullName;
        }

        public String getFirst() {
            return first;
        }

        public void setFirst(String first) {
            this.first = first;
        }

        public String getLast() {
            return last;
        }

        public void setLast(String last) {
            this.last = last;
        }

        public String getFullName() {
            return fullName;
        }

        public void setFullName(String fullName) {
            this.fullName = fullName;
        }
    }
import java.util.List;

public class Person {
 private List<Name> names;
 // getters/setters


 public Person() {
 }

public List<Name> getNames() {
    return names;
}

 public void setNames(List<Name> names) {
    this.names = names;
 }
}
个人类别定义-

    public class Name {
        private String first;
        private String last;
        private String fullName;
        // getters/setters

        public Name() {

        }

        public Name(String first, String last, String fullName) {
            this.first = first;
            this.last = last;
            this.fullName = fullName;
        }

        public String getFirst() {
            return first;
        }

        public void setFirst(String first) {
            this.first = first;
        }

        public String getLast() {
            return last;
        }

        public void setLast(String last) {
            this.last = last;
        }

        public String getFullName() {
            return fullName;
        }

        public void setFullName(String fullName) {
            this.fullName = fullName;
        }
    }
import java.util.List;

public class Person {
 private List<Name> names;
 // getters/setters


 public Person() {
 }

public List<Name> getNames() {
    return names;
}

 public void setNames(List<Name> names) {
    this.names = names;
 }
}
import java.util.List;
公共阶层人士{
私人名单名称;
//能手/二传手
公众人士(){
}
公共列表getNames(){
返回姓名;
}
公共无效集合名(列表名){
this.names=名称;
}
}
PersonDto类定义-

import java.util.List;
import java.util.Map;

public class PersonDto {
    private Map<String, Name> personalNames;
    private String[] firstNames;
    private List<String> lastNames;
    // getters/setters omitted

    public PersonDto() {
    }

    public Map<String, Name> getPersonalNames() {
        return personalNames;
    }

    public void setPersonalNames(Map<String, Name> personalNames) {
        this.personalNames = personalNames;
    }

    public String[] getFirstNames() {
        return firstNames;
    }

    public void setFirstNames(String[] firstNames) {
        this.firstNames = firstNames;
    }

    public List<String> getLastNames() {
        return lastNames;
    }

    public void setLastNames(List<String> lastNames) {
        this.lastNames = lastNames;
    }
}


    Map<String,String> fieldMap = new HashMap<>();
    fieldMap.put("names{fullName}", "personalNames{key}");
    fieldMap.put("names{}", "personalNames{value}");
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().mapNulls(false).dumpStateOnException(false).build();
    ClassMapBuilder<Person, PersonDto> classBuilder = mapperFactory.classMap(Person.class, PersonDto.class);
    fieldMap.forEach((k,v) -> classBuilder.field(k,v));
    classBuilder.register();
    BoundMapperFacade<Person, PersonDto> delegate = mapperFactory.getMapperFacade(Person.class, PersonDto.class);



    Person person = new Person();
    Name n1 = new Name("raj", "kumar", "raj kumar");
    Name n2 = new Name("senthil", "kumar", "senthil kumar");
    person.setNames(Arrays.asList(n1, n2));
    PersonDto pDto = mapper.map(person);
    System.out.println(pDto);
import java.util.List;
导入java.util.Map;
公共类个人{
私人地图姓名;
私有字符串[]名;
私人名单;
//省略了getter/setter
公众人物{
}
公共映射getPersonalNames(){
返回个人姓名;
}
public void setPersonalNames(映射personalNames){
this.personalNames=personalNames;
}
公共字符串[]getFirstNames(){
返回名字;
}
public void setFirstNames(字符串[]firstNames){
this.firstNames=名字;
}
公共列表getLastNames(){
返回姓氏;
}
public void setLastNames(列出lastNames){
this.lastNames=lastNames;
}
}
Map fieldMap=新的HashMap();
fieldMap.put(“名称{fullName}”,“个人名称{key}”);
fieldMap.put(“名称{}”,“个人名称{value}”);
MapperFactory MapperFactory=new DefaultMapperFactory.Builder().mapNulls(false).dumpStateOnException(false).build();
ClassMapBuilder classBuilder=mapperFactory.classMap(Person.class,PersonDto.class);
forEach((k,v)->classBuilder.field(k,v));
register();
BoundMapperFacade委托=mapperFactory.getMapperFacade(Person.class,PersonDto.class);
Person=新人();
名称n1=新名称(“raj”、“kumar”、“raj kumar”);
名称n2=新名称(“senthil”、“kumar”、“senthil kumar”);
person.setNames(数组.asList(n1,n2));
PersonDto pDto=mapper.map(个人);
系统输出打印项次(pDto);
当我运行此代码时,我得到以下错误-

无法将java.lang.Object转换为mapper.Name java.lang.ClassCastException:java.lang.Object不能转换为mapper.Name 在ma.glasnost.orika.generated.orika_PersonDto_Person_mapper 12572858142441$0.mapAtoB(orika_PersonDto_Person_mapper 12572858142441$0.java) 在ma.glasnost.orika.impl.mapping.strategy.UseCustomMapperStrategy.map(UseCustomMapperStrategy.java:77) 位于ma.glasnost.orika.impl.DefaultBoundMapperFacade.map(DefaultBoundMapperFacade.java:137) 位于ma.glasnost.orika.impl.DefaultBoundMapperFacade.map(DefaultBoundMapperFacade.java:94) 位于mapper.PersonToPersonDtoMapper.map(PersonToPersonDtoMapper.java:29) 位于mapper.PersonToPersonDtoMapper.map(PersonToPersonDtoMapper.java:14) 位于mapper.PersonToPersonDtoMapperTest.test1(PersonToPersonDtoMapperTest.java:29) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) 位于org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:584) 位于org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:172) 位于org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) 位于org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:804) 位于org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:145) 位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) 位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) forEach(ArrayList.java:1249) 位于org.testng.TestRunner.privateRun(TestRunner.java:770) 位于org.testng.TestRunner.run(TestRunner.java:591) 位于org.testng.SuiteRunner.runTest(SuiteRunner.java:402) 在org.testng.SuiteRunner.runSequential上(SuiteRunner.java:396) 位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:355) 运行(SuiteRunner.java:304)

我在github上托管了这段代码


我的代码有什么问题?如何解决此问题

之所以出现这个问题,是因为Java泛型在运行时被剥离掉了
Map.Entry
(编译时)变为
Map.Entry
(运行时)

您可以通过如下调整ClassMapBuilder来解决此问题:

Map fieldMap=newhashmap();
fieldMap.put(“名称{fullName}”,“个人名称{key}”);
fieldMap.put(“名称{}”,“个人名称{value}”);
MapperFactory MapperFactory=new DefaultMapperFactory.Builder().mapNulls(false).dumpStateOnException(false).build();
//将Person、persond替换为泛型参数。
ClassMapBuilder classBuilder=mapperFactory.classMap(PersonDto.class,Person.class);
forEach((k,v)->classBuilder.field(v,k));
register();
//代码的其余部分是相同的

发生此问题的原因是Java泛型在运行时被剥离
Map.Entry
(编译时)变为
Map.Entry
(运行时)

您可以通过如下调整ClassMapBuilder来解决此问题:

Map fieldMap=newhashmap();
fieldMap.put(“名称{fullName}”,“个人名称{key}”);
fieldMap.put(“名称{}”,“个人名称{value}”);
MapperFactory MapperFactory=new DefaultMapperFactory.Builder().mapNulls(false).dumpStateOnException(false).build();
//将Person、persond替换为泛型参数。
ClassMapBuilder classBuilder=mapperFactory.classMap(PersonDto.class,Person.class);
forEach((k,v)->classBuilder.field(v,k));
register();
//剩下的鳕鱼