关于java:从方法返回两个不同的值

Returning two different values from method

我有方法将String记录列表解析为对象并返回List个对象。 所以我的方法签名是这样的。

public List parse(String[] records);

但我也想返回,其他指标,如未成功解析的字符串记录数。 现在我感到困惑,如何返回此指标。 一种选择是创建另一个包装类,该类包含已解析记录列表和存储这些度量标准的成员。

但是我经常面对这种情况,这样我最终会创建许多包装类。

不确定我是否解释得很好。 这里有什么建议?


您的问题已经讨论过(请参阅此示例:Java方法参数是否应该用于返回多个值?)。我个人认为如果返回的数据不相关,你应该进行两次方法调用。如果是,那么你应该在调用它时创建一个"包装器"类。如果它们确实是相关数据,那么无论如何它们可能属于同一类。

我个人不赞成修改传入的对象,因为对我来说这是一个副作用,并且不清楚这个方法到底做了什么。

另一种思考方式是使用工厂模式(请参阅http://en.wikipedia.org/wiki/Factory_method_pattern),如果您正在构建的对象很复杂。


遗憾的是,Java不支持从函数返回多个值。你可以创建一个包装类,就像你说的那样。另一个选择是传入一个整数数组或一个"指标"对象或类似的东西,并在Parse中修改它。稍微好一点的可能是拥有一个或多个实例变量(而不是方法变量)来跟踪您需要的任何类型的诊断信息。


您可以返回包含列表的复杂对象以及所需的所有信息。


创建一个ParseResult对象。您可以包括List,已解析的记录数,错误等。使其足够通用,以便可以从不同的方法返回它。您甚至可以将其作为基类并返回从中扩展的类。只是按照对象进行思考。


对于使用Java开发的许多人来说,这是一个非常普遍的问题。在其他语言中,例如Scala,可以创建元组,这些元组是可以包含多个值的匿名对象,并将它们用作参数或返回值。


包装类是从函数返回更多信息的标准方法。另一种方法是通过引用传递另一个参数并在函数中修改它,从而有效地将新信息返回给调用者。例如,在您的情况下,您将传递一个空列表并添加该列表中的所有已解析元素。返回类型可以是度量标准或错误代码。因此呼叫者将具有两条信息。


我打算向你推荐一种'c ++ pair'类型,但后来我发现了这个:Java中C ++ Pair 的等价物是什么?


也许这可以帮助http://www.yoda.arachsys.com/java/parameters.html