2010-08-12 22 views
1

我正在寫一些javadoc,並想知道如何強調一個out參數。如何指定輸出和參數?

目前,我正在做這個(很簡單)

/** 
* @param cl  (IN Parameter) description here <br/> 
* @param nodes  (OUT Parameter) description here <br/> 
* @param holotypes (OUT Parameter) description here <br/> 
*/ 
public void getNodes(List<O> cl, List<Node<O>> nodes, List<O> holotypes) {...} 
+5

就我個人而言,我嘗試避免出參數,而是返回一個包含什麼是out參數的對象。我發現代碼通常好得多。 – TofuBeer 2010-08-12 05:51:42

+0

@TofuBeer我也是這樣,但是我不得不返回2個列表。兩種不同的方法在這裏是不可能的,所以這就是我所擁有的。返回一個列表並將另一個列表作爲外部參數傳遞。是恕我直言最糟糕的選擇。 – Tom 2010-08-12 05:54:36

+4

您可以返回List []並記錄它將始終是大小2.或者您可以創建一個包裝2個列表的類(如結構體)。 – 2010-08-12 06:09:39

回答

3

JavaDoc的看起來好像沒什麼問題。清晰可理解。不要忘記添加名單要創建和是情緒化,否則該方法可能抱怨與討厭的例外。答案非常多。

但我建議你不要使用out參數,除非你被迫這樣做(比如你必須實現第三方接口或者你必須使用JNDI)。

該方法被命名爲getNodes,因此大多數程序員期望該方法返回一個數組或一組節點。但在這種情況下,該方法使用節點和整型填充兩個傳遞的列表。

所以,如果你可以自由選擇的方法簽名,我建議你聲明它是這樣的:

public List<O> getNodes(List<O> cl) { 
    List<O> result = pickAllNodesFromList(cl); 
    return result; 
} 

public List<O> getHolotypes(List<O> cl) { 
    List<O> result = pickAllHolotypesFromList(cl); 
    return result; 
} 

或聲明的一種特殊類型的類,如:

class CLTypes<O> { 
    List<O> nodes = new ArrayList<O>(); 
    List<O> holotypes = new ArrayList<O>(); 

    CLTypes(List<O> cl) { 
    nodes.addAll(pickAllNodes(cl)); 
    holotypes.addAll(pickAllNodes(cl)); 
    } 

    // getters for the nodes 
    // ... 

    // private methods to pick objects for source list 
    // ... 
} 

和落實方法是這樣的:

public CLTypes<O> getNodes(List<O> cl) { 
    return new CLTypes<O>(cl); 
} 

如果你需要返回兩個列表(如我從上面的評論讀),另一種簡單的解決方案可以被包裹在兩個列表中的地圖:

public Map<String, List<O>> getNodes(List<O> cl) { 
    Map<String, List<O>> result = new HashMap<String, List<O>>(); 
    result.put("nodes", pickAllNodes(cl)); 
    result.put("holotypes", pickAllHolotypes(cl)); 
    return result; 
} 
+0

感謝您的建議 – Tom 2010-08-12 06:18:30

+0

不客氣:)只是忽略它們,如果你不能改變方法簽名;) – 2010-08-12 06:23:03

6

嚴格地說,你不能在Java中實現OUT參數。所有參數都是IN,並通過值傳遞...其中值是引用類型的引用。

在您的示例中,參數似乎的行爲與OUT參數相似,因爲它們是可變集合。但這是一種幻覺。例如:

res = null; 
    make(res); 
    assert res != null; // this would succeed with a real OUT parameter 

    public void make(List<String> p /* OUT parameter */) { 
     p = new ArrayList<String>(); 
    } 

現在,如果你覺得這些標籤參數「IN」和你的項目文檔中的「OUT」參數,這很好(前提是你清楚地記錄您可以通過標籤的意思)。

但你通常不會看到這個術語中的javadoc使用,因爲嚴格來說,它是不正確...相對於至少自20世紀70年代在比較編程語言課程中講授的標準術語。

0

您可以創建註釋In和Out。使用Documented註釋標註這些註釋。我想認爲您可以將註釋應用於最新的JAVA中的參數。 (如果你不能忽視這個答案。)這些註釋應該顯示在你的javadoc中。