2017-07-26 63 views
-1

這是我的原始類。使用lombok @getter和@setter來簡化方法

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); 
     } 

如何使用龍目簡化的addChild?

+1

你不能。 '@ Setter'屬於現場或課堂級別。在方法上沒有意義。 –

+0

我不知道你在做什麼。爲什麼你有一個註釋_和_一個增變器?我會強烈**建議你完全避免龍目島,直到你有更好的基礎知識。 AOP真的不是很簡單 - 不管Lombok假裝它是多麼的簡單。 –

+0

如何使用lombok簡化addChild /整個類以及如何在構造函數中初始化子對象?我是使用龍目島的新手。我的問題是,在這個班級中如何使用吸氣劑,二流體? –

回答

0

簡短的回答,不,Lombok無法創建添加方法或執行超出簡單獲取和設置的任何內容。

Lombok註解是課程級別,所以正確使用如下我認爲你正在嘗試做的事情。您將需要在構造函數中初始化List。

如果你確實想要自定義setter,那很好。任何實現都會覆蓋lombok創建的方法。

這是您的原始課程的簡化版本。 標籤將爲空,並且子女列表將爲空,不爲空。

@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); 
    } 
}