美文网首页
关于lombok的小话题

关于lombok的小话题

作者: wallimn | 来源:发表于2019-08-25 16:00 被阅读0次
    • 一个父类
    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的小话题

          本文链接:https://www.haomeiwen.com/subject/upahectx.html