使用lombok @getter和@setter来简化方法

时间:2017-07-26 22:03:19

标签: java spring-mvc getter-setter lombok

这是我原来的课程。

public class HierarchyTreeNode {
    private String label;
    private List<HierarchyTreeNode> children;

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public List<HierarchyTreeNode> getChildren() {
        return children;
    }

    public void addChild(HierarchyTreeNode child) {
        if (children == null) {
            children = new ArrayList<>();
        }
        children.add(child);
    }
}

我想在这里使用Lombok @getter和@setter。应该将“addChild”简化为setter方法,并将子进程的初始化放在构造函数中。我尝试了以下但我无法理解如何使其工作:

public class HierarchyTreeNode {
        @Getter
        private String label;
        private List<HierarchyTreeNode> children;

        public HierarchyTreeNode() {
          this.label = label;
          this.children = children;
        }

        public String getLabel() {
            return label;
        }

        public void setLabel(String label) {
            this.label = label;
        }

        public List<HierarchyTreeNode> getChildren() {
            return children;
        }

        @Setter
        public void addChild(HierarchyTreeNode child) {
            if (children == null) {
                children = new ArrayList<>();
            }
            children.add(child);
        }
    }

我的控制器具有以下功能:

   if (!existingNodes.containsKey(childName)) {
            // find node or create new node
            HierarchyTreeNode node = existingNodes.get(parentName);
            if (node == null) {
                // new top level node
                node = new HierarchyTreeNode();
                node.setLabel(parentName);
                root.addChild(node);
                existingNodes.put(parentName, node);
            }
            // add child
            HierarchyTreeNode child = new HierarchyTreeNode();
            child.setLabel(childName);
            node.addChild(child);
            existingNodes.put(childName, child);
        }

如何使用lombok简化addchild?

1 个答案:

答案 0 :(得分:1)

简短回答,不,除了简单的获取和设置之外,Lombok无法创建添加方法或执行任何操作。

Lombok注释是类级别,因此正确使用如下所示我认为您正在尝试做什么。您需要在构造函数中初始化List。

如果您确实需要自定义设置器,那很好。任何实现都将覆盖lombok创建的方法。

以下是原始课程的简化版本。 标签将为null, children 列表将为空,不为空。

@Getter
@Setter
public class HierarchyTreeNode {

    // Lombok will create a set of get/set methods for these...
    private String label;
    private List<HierarchyTreeNode> children;

    public HierarchyTreeNode() {
      this.children = new ArrayList<>();
    }

    // This isn't a setter.  You are adding hence you need to implement.
    public void addChild(HierarchyTreeNode child) {
      this.children.add(child);
    }
}