gpt4 book ai didi

java - 在 Java 中返回字符串作为参数的最佳方法

转载 作者:行者123 更新时间:2023-12-01 21:18:17 24 4
gpt4 key购买 nike

我经常遇到这样的情况:我想从 Java 方法返回多个值,但不值得仅仅为此目的创建类/对象。在我当前的具体情况下,我有许多输入验证方法来计算我希望在调用者中重复使用的中间结果。

一种解决方案是传入一个新列表并让该方法附加我的结果,但是当我知道我想要返回的每个参数总是有一个值时,这是一种误导。

最常见的情况是当我想返回一个字符串时。我可以传入 StringBuilder 或 StringBuffer,并让方法填充值。但由于某些奇怪的原因,这些类没有提供 set() 方法(除了构造函数之外,这对此没有帮助)。我能想到的最接近的是 myStringBuilder.replace(0, myStringBuilder.length(), myString) ,但这真的很难看,并且不能清楚地传达我的意图。因此,我想用我自己的实用程序类来扩展这些类,该类添加了 set() 方法(并在内部使用替换),但由于某些奇怪的原因,这些类被声明为 final ,并且我也做不到。

我错过了什么吗?是否有一些首选方法可以完成我想要的操作 - 传递某种可写字符串缓冲区,该方法可以在其中放入值?这些类被声明为最终类有充分的理由吗?

这种方法的一个例子可能是:

void foo(List<ObjectA> arg1, List<ObjectB> arg2, StringBuffer somethingInteresting, StringBuffer somethingElseInteresting)

如果两个字符串在语义上不相关,我不想用 List 替换最后两个参数,因为我在列表顺序上强加了一些语义,而这些语义没有明确传达。我不想传递两个单独的列表并期望每个列表返回的 size() 为 1,因为调用者又不清楚。

最佳答案

问题在于您拒绝创建另一个类。我并不是说你的问题是无效的,但如果你想返回一堆值并且你的函数知道单一职责原则,那么这些值是相关的。由于它们是相关的,因此您将有其他想要对它们作为一个组进行操作的事物。这些操作属于您返回的类。

我从未后悔创建一个类来返回类似的值。

我从来没有后悔过拆分一个返回两个不相关值的类。

Java 尽量不让你轻易做会让你后悔的事情。

顺便说一句,要直接回答问题,您可能会返回一个字符串数组。返回 String[] 的值并让它返回类似“new String[] {firstString, secondaryString,thirdString}”的内容,但正如我所说,这通常是错误的路径。

正如你所说,你可以创建一个可变字符串,但它们是不可变的有一个很好的理由。不变性是线程安全的关键——即使您认为自己不经常使用线程,但在您下面改变值也是一个问题。高度线程化的语言正在转向不变性(函数式风格)——我不会开始构建一个远离它的基础设施。

关于java - 在 Java 中返回字符串作为参数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com