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;