- 一个父类
package io.renren;
import lombok.Data;
@Data
public class Man {
private String name;
}
- 一个子类
package io.renren;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper=false)
@ToString(callSuper=true)
public class SuperMan extends Man {
/**
* 超人比正常人多些技能
*/
private String skill;
}
- 把父类属性复制给子类
package io.renren;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
public class MyTest {
@Test
public void testCopyProperties(){
Man man = new Man();
man.setName("wallimn");
SuperMan superMan = new SuperMan();
BeanUtils.copyProperties(man, superMan);
System.out.println(superMan);
}
}
-
结果
SuperMan(skill=null) -
我想说的问题
看到这个结果,我的第一反应是怎么没有把name的属性复制到子类。不知道大家会不会这么想?
实际上属性已经复制了,问题出在@Data注释添加的ToString方法,默认只输出本身的属性。不输出父类的属性。在子类上加上注解@ToString(callSuper=true),就可以看到不觉得有错的结果了,见结果2。 -
结果2
SuperMan(super=Man(name=wallimn), skill=null)
网友评论