【问题标题】:Refactor method that uses input parameters as return types使用输入参数作为返回类型的重构方法
【发布时间】:2021-11-21 06:02:52
【问题描述】:

我有一个类似的代码块,它接受 3 个参数并使用其中两个来返回值,如下所示:

int getAttempts(int foo, List<Object> bar, List<Object> baz) {

      int count = 5;
      bar.add(new Object()); // These both require further method calls before they are populated.
      baz.add(new Object());

      return count;

}

以上是一个简单的例子,但它涵盖了问题所在。

修改输入参数会使行为难以推理。

那么对于干净的重构有什么想法吗?

一种选择是制作包装对象,但我认为这不是一个可行的选择,因为对于其他所有方法,我都必须制作单独的包装对象。

【问题讨论】:

  • 重构代码的一件事是策略通常取决于代码的细节。您显示的代码似乎过于简单,无法给出答案。
  • 特别是:“使用输入参数作为返回类型”不清楚你的意思是什么:返回类型是int。你是说这与...foo有关?
  • @AndyTurner 我的意思是它使用传递给它的参数作为输出值的容器。
  • 那与它的返回类型无关。
  • @AndyTurner, Output parameters 通常被称为返回参数。在这种情况下,OP 将它们命名为返回类型。就可读性而言,它们通常被认为是 OOP 中的“不好的做法”。例如,参见 Clean Code 一书。

标签: java refactoring


【解决方案1】:

您可以使用库 org.javatuples.javatuples 中的 Triplet

https://www.baeldung.com/java-tuples

【讨论】:

  • 这很好,但需要添加额外的依赖项。任何可以在 Java 中本地完成的事情?
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 2020-11-22
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多