【发布时间】:2016-09-19 20:02:17
【问题描述】:
我经常遇到这样一种情况,我想从 Java 方法返回多个值,而仅仅为此目的创建一个类/对象是不值得的。在我当前的具体情况下,我有许多输入验证方法来计算我想在调用者中重复使用的中间结果。
一种解决方案是传入一个新列表并让该方法附加我的结果,但是当我知道我想要返回的每个参数总是有一个值时,这是一种误导。
最常见的这种情况是当我想返回一个字符串时。我可以传入 StringBuilder 或 StringBuffer,并让方法填充值。但是由于一些奇怪的原因,这些类没有提供 set() 方法(除了构造函数,这对这个目的没有帮助)。我能想出的最接近的是myStringBuilder.replace(0, myStringBuilder.length(), myString),但这真的很难看,并没有清楚地传达我的意图。所以我想用我自己的实用程序类来扩展这些类,它添加了一个 set() 方法(并在内部使用替换),但是这些类被声明为 final 出于某种奇怪的原因,我不能这样做要么。
我错过了什么吗?是否有一些首选的方式来做我想做的事情 - 传入某种可写的字符串缓冲区,该方法可以将值放入其中?这些类被声明为 final 有充分的理由吗?
这种方法的一个例子可能是:
void foo(List<ObjectA> arg1, List<ObjectB> arg2, StringBuffer somethingInteresting, StringBuffer somethingElseInteresting)
如果两个字符串在语义上不相关,我不想用 List 替换最后两个参数,因为我在列表顺序上强加了一些没有明确传达的语义。我不想传入两个单独的 List 并期望每个返回的 size() 为 1,因为调用者也不清楚这一点。
【问题讨论】:
-
你能分享预期的方法签名吗?
-
希望当前文本更清晰。我的意思是对于任何给定的参数,我希望得到一个结果,因此传入一堆列表,每个列表在返回时的 size() 都应该为 1,这是一种误导。
-
我添加了一个方法签名和一些额外的澄清文本。
-
你的问题有点不清楚,有点像文字墙。您能否在程序的实际上下文中添加一个简明扼要的陈述,说明您究竟想要完成什么?
-
您所描述的技术术语是 out 参数。 Java 没有直接支持此功能。
标签: java string parameter-passing