簡體   English   中英

從方法返回兩個不同的值

[英]Returning two different values from method

我有方法將String記錄列表解析為對象並返回對象List 所以我的方法簽名是這樣的。

public List<ParsedObject> parse(String[] records) ;

但我也想返回,其他指標,如未成功解析的字符串記錄數。 現在我感到困惑,如何返回此指標。 一種選擇是創建另一個包裝類,該類包含已解析記錄列表和存儲這些度量標准的成員。

但是我經常面對這種情況,這樣我最終會創建許多包裝類。

不確定我是否解釋得很好。 這里有什么建議?

遺憾的是,Java不支持從函數返回多個值。 你可以創建一個包裝類,就像你說的那樣。 另一個選擇是傳入一個整數數組或一個“指標”對象或類似的東西,並在Parse中修改它。 稍微好一點的可能是擁有一個或多個實例變量(而不是方法變量)來跟蹤您需要的任何類型的診斷信息。

您的問題已經討論過(請參閱此示例: Java方法參數是否應該用於返回多個值? )。 我個人認為如果返回的數據不相關,你應該進行兩次方法調用。 如果是,那么你應該在調用它時創建一個“包裝器”類。 如果它們確實是相關數據,那么無論如何它們可能屬於同一類。

我個人不贊成修改傳入的對象,因為對我來說這是一個副作用,並且不清楚這個方法到底做了什么。

另一種思考方式是使用工廠模式(請參閱http://en.wikipedia.org/wiki/Factory_method_pattern ),如果您正在構建的對象很復雜。

創建一個ParseResult對象。 您可以包括List,已解析的記錄數,錯誤等。使其足夠通用,以便可以從不同的方法返回它。 您甚至可以將其作為基類並返回從中擴展的類。 只是按照對象進行思考。

您可以返回包含列表的復雜對象以及所需的所有信息。

我打算向你推薦一種'c ++ pair'類型,但后來我發現了這個: Java中C ++ Pair <L,R>的等價物是什么?

包裝類是從函數返回更多信息的標准方法。 另一種方法是通過引用傳遞另一個參數並在函數中修改它,從而有效地將新信息返回給調用者。 例如,在您的情況下,您將傳遞一個空列表並添加該列表中的所有已解析元素。 返回類型可以是度量標准或錯誤代碼。 因此呼叫者將具有兩條信息。

對於使用Java開發的許多人來說,這是一個非常普遍的問題。 在其他語言中,例如Scala,可以創建元組,這些元組是可以包含多個值的匿名對象,並將它們用作參數或返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM