Returning two different values from method
我有方法将
但我也想返回,其他指标,如未成功解析的字符串记录数。 现在我感到困惑,如何返回此指标。 一种选择是创建另一个包装类,该类包含已解析记录列表和存储这些度量标准的成员。
但是我经常面对这种情况,这样我最终会创建许多包装类。
不确定我是否解释得很好。 这里有什么建议?
您的问题已经讨论过(请参阅此示例: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