我有方法将String
条记录列表解析为对象并返回List
个对象。所以我的方法签名是这样的。
public List<ParsedObject> parse(String[] records)
;
但我也想返回,其他指标,如未成功解析的字符串记录数。现在我感到困惑,如何返回此指标。一种选择是创建另一个包装类,它包含已解析的记录列表和存储这些指标的成员。
但我经常面对这种情况,这样我最终会创建许多包装类。
不确定我是否解释清楚。这里有什么建议吗?
答案 0 :(得分:5)
遗憾的是,Java不支持从函数返回多个值。你可以创建一个包装类,就像你说的那样。另一个选择是传入一个整数数组或一个“指标”对象或类似的东西,并在Parse中修改它。稍微好一点的可能是拥有一个或多个实例变量(而不是方法变量)来跟踪您需要的任何类型的诊断信息。
答案 1 :(得分:5)
您的问题已经讨论过(请参阅此示例:Should Java method arguments be used to return multiple values?)。我个人认为如果返回的数据不相关,你应该进行两次方法调用。如果是,那么你应该在调用它时创建一个“包装器”类。如果它们确实是相关数据,那么无论如何它们可能属于同一类。
我个人不赞成修改传入的对象,因为对我而言这是一个副作用,并且不清楚这个方法到底是做什么的。
另一种思考方式是使用工厂模式(参见http://en.wikipedia.org/wiki/Factory_method_pattern),如果您正在构建的对象很复杂。
答案 2 :(得分:1)
创建一个ParseResult对象。您可以包括List,已解析的记录数,错误等。使其足够通用,以便可以从不同的方法返回它。您甚至可以将其作为基类并返回从中扩展的类。只是按照对象进行思考。
答案 3 :(得分:1)
您可以返回包含列表的复杂对象以及您需要的所有信息。
答案 4 :(得分:0)
答案 5 :(得分:0)
我打算向你推荐一些&#c; c ++对&#39;类型,但后来我发现了这个:What is the equivalent of the C++ Pair<L,R> in Java?
答案 6 :(得分:0)
包装类是从函数返回更多信息的标准方法。另一种方法是通过引用传递另一个参数并在函数中修改它,从而有效地将新信息返回给调用者。例如,在您的情况下,您将传递一个空列表并添加该列表中的所有已解析元素。返回类型可以是度量标准或错误代码。因此呼叫者将拥有这两条信息。
答案 7 :(得分:0)
对于使用Java开发的许多人来说,这是一个非常常见的问题。在其他语言中,例如Scala,可以创建元组,这些元组是可以包含多个值的匿名对象,并将它们用作参数或返回值。