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

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

public Listparse(String[] records);

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

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

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

您可以在声明此parse()方法的类中包含其他变量(如果它适合OOP概念)并编写getter方法来访问这些值。

你期望每个记录解析1个对象吗? 如果是这样,调用代码可以将列表的大小与记录的长度进行比较。

这只是一个例子,尽管它可以在这种情况下起作用。

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

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

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

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

一个快速的包装器类并不是一个很大的投资,特别是如果你只需要在一个文件中,并且只需要一个几行长的内部类。

我认为,如果它只在一个类中,使用实例变量来跟踪信息是一种更简洁的方法,但当然这也是一种合理的方法。作者特别提到不想创建很多包装类,所以我认为解释替代方案会很好。

使用实例变量将使线程安全的方式更难以使用该类,我会避免使用它。

是的,这是一种可能性,但设计接受参数中的某个对象并更新它的方法是一种很好的做法。例如,在这种情况下的度量对象?

我更喜欢避免这样的副作用。根据此解析方法所负责的类,我将使用实例变量或包装类。 @ARRG是正确的,如果它需要是线程安全的,你应该避免实例变量。

Hrrrrrm。我认为,不变性是一种更相关的实践,并且调用者必须处理一个恰当的返回值的对象是很尴尬的。

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值