- 一個父類
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;
}
- 把父類屬性復(fù)制給子類
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);
}
}
結(jié)果
SuperMan(skill=null)我想說的問題
看到這個結(jié)果悼凑,我的第一反應(yīng)是怎么沒有把name的屬性復(fù)制到子類吻贿。不知道大家會不會這么想例嘱?
實際上屬性已經(jīng)復(fù)制了,問題出在@Data注釋添加的ToString方法,默認只輸出本身的屬性浪漠。不輸出父類的屬性秕豫。在子類上加上注解@ToString(callSuper=true)朴艰,就可以看到不覺得有錯的結(jié)果了,見結(jié)果2混移。結(jié)果2
SuperMan(super=Man(name=wallimn), skill=null)