zoukankan      html  css  js  c++  java
  • Lombok的大坑!!@Data重写的toString特性

    @Data注解中有默认toString方法的重写。

    并且Lombok的toString方法在展示数据时默认调用的是Getr方法,如果有逻辑需要在Get取值时进行计算,并且此值在创建对象以后为null值就会出现问题。

    如果单独使用@ToString注解则可以规避这个坑。同时使用Data和ToString注解时ToString的权重更高。

    @ToString

    可选元素

    修饰符和类型可选元素描述
    boolean callSuper toString在输出中包含超类实现的结果。
    boolean doNotUseGetters 通常情况下,如果 getters是可用的,那么被调用。
    java.lang.String[] exclude 这里列出的任何字段将不会被打印在生成的toString实现中。
    boolean includeFieldNames 在打印时包括每个字段的名称。
    java.lang.String[] of 如果存在,明确列出要打印的字段。
    发现这个问题是因为特殊需求需要在get方法取值时进行计算。
    举个例子
    @ToString(doNotUseGetters=false)
    @AllArgsConstructor
    @NoArgsConstructor
    public class LombokBean {
    private String name; 
    private Integer age;

    public Integer getAge() { test001(); return age; }

    private void test001(){ System.out.println("测试"); System.out.println(age > 0); } }
    //测试lombok
    @Test public void test7(){ LombokBean lombokBean = new LombokBean();
    System.out.println(lombokBean); }

     原因就是默认Integer为null,使用了null进行了逻辑计算。

    而这一个问题的产生反而是toString在展示数据时使用的Get取值。

    @ToString(doNotUseGetters=false) 是默认调用Get取值的意思。
    改成true则可以避免此问题出现,会直接取实体中属性的值。

     
  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13623176.html
Copyright © 2011-2022 走看看