关于lombok的小话题

  • 一个父类
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)

你可能感兴趣的:(关于lombok的小话题)