Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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
Java 使用“映射注释”;这";使用github'时字段上的值(@Mapping(";this";));s型推土机_Java_Testng_Dozer - Fatal编程技术网

Java 使用“映射注释”;这";使用github'时字段上的值(@Mapping(";this";));s型推土机

Java 使用“映射注释”;这";使用github'时字段上的值(@Mapping(";this";));s型推土机,java,testng,dozer,Java,Testng,Dozer,我看到了一个类,其中@Mapping(“this”)被添加到一个字段中,还有一个测试方法,在调用github的dozermapper中的map方法后检查源对象和结果对象是否相等 由于我无法发布实际代码,我在下面添加了一个类似的类和测试方法。(我使用了lombok的@Data、@noargsconstuctor和@allargsconstuctor注释来避免显式指定getter、setter和构造函数。) 试验方法: @Test public void testMapper() { Test

我看到了一个类,其中
@Mapping(“this”)
被添加到一个字段中,还有一个测试方法,在调用github的dozermapper中的map方法后检查源对象和结果对象是否相等

由于我无法发布实际代码,我在下面添加了一个类似的类和测试方法。(我使用了lombok的
@Data
@noargsconstuctor
@allargsconstuctor
注释来避免显式指定getter、setter和构造函数。)

试验方法:

@Test
public void testMapper() {
   TestObj testObj = new TestObj(1, "test");
   TestObj testCopy = DozerBeanMapperBuilder.create().build().map(testObj, TestObj.class);
   Assert.assertNotEquals(testObj, testCopy);
}

考试通过了。如果我删除
@Mapping(“this”)
,那么相同的测试将失败。那么@Mapping(“this”)是如何改变映射过程的,从而使映射对象和源对象不同的呢?

@Mapping
注释是在源类和目标类中的字段名称不同时使用的

例如,下面的代码将源类对象中的
fullName
字段映射到目标类对象中的
name
字段。这在映射两个不同类的对象时特别有用

@Mapping("fullName")
private int name;
因此,如果我们在
名称
字段上使用
@Mapping(“this”)
,那么它会将源类本身映射到
名称
字段。这里因为
名称
字符串
类型,所以源类的
toString()
表示将映射到
名称
字段。如果我们对
name
字段使用了不兼容的类型,如
int
,则会引发异常。如果源对象是
对象
类型或与源对象相同的类型,则源对象本身将存储在
名称
字段中

因此,在给定的问题中,源类和目标类是相同的,但是
@Mapping(“this”)
提供给
name
字段。因此,如果源对象类似于
TestObj(id=1,name=“test”)
,那么映射的对象将是
TestObj(id=1,name=“TestObj(id=1,name=“test”)”
,即
name
字段将是源对象的
toString()
。因此这两个对象将不相等

如果删除了
@Mapping(“this”)
,测试将失败,因为
@Data
注释添加了一个
equals()
方法,该方法检查各个字段的相等性,从而使源和映射对象相等

@Mapping("fullName")
private int name;