为了账号安全,请及时绑定邮箱和手机立即绑定

是否建议根据参数更改方法的返回类型?

是否建议根据参数更改方法的返回类型?

紫衣仙女 2022-06-08 17:40:06
我在 Java 中有一个旧代码,它有一个返回番石榴ArrayTable<>的方法。现在,我有一个要求,我想检查将在 arrayTable 中的行数,并且根据数量,我需要决定是否实际获取 ArrayTable。ArrayTable foo(..args) {}该方法调用内部 API,我将其结果组合成 ArrayTable。这些内部 API 有它们的行计数实用程序,可以在没有任何开销的情况下获取行计数。我的问题是解决这个问题的最佳方法是什么?据我所知,可能有两种方法:单独的实用程序:为该方法创建一个单独的行计数实用程序,除了调用内部 API 的行计数实用程序并返回行计数外,它执行相同的操作。这将导致重复代码。使用通用返回类型根据额外参数更改返回类型T foo(..args, boolean fetchRowCount) {if (fetchRowCount == true) {    return (Integer) rowCount;}else {    //do the normal thing    return (ArrayTable<>) output;}}
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

我建议用额外的参数覆盖该方法,并使用现有的方法来获取arrayTable,并且只在被覆盖的方法中做额外的工作(计算行数)。


ArrayTable foo(... args) {} //existing method


Integer foo(... args, fetchRows) {

    arrayTable = foo(args);

    // do the rest here

}

通过这种方式,您可以降低添加任何回归的风险,并且您为此必须进行的代码更改将是最小的。


查看完整回答
反对 回复 2022-06-08
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

不,这是不可取的。


您可以创建一个FooResult包含标志的新类,并且可以包含 rowCount 或输出:


class FooResult {

  private boolean outputAvailable;

  private Integer rowCount;

  private ArrayTable<> output;


  public FooResult(Integer rowCount) {

    this.outputAvailable = false;

    this.rowCount = rowCount;

  }


  public FooResult(ArrayTable output) {

    this.outputAvailable = true;

    this.output = output;

  }


  // getters

}

然后你的foo方法应该有FooResult它的返回类型,并返回如下:


if (/* some condition */) {

    return new FooResult(rowCount);

} else {

    return new FooResult(output);

}

最后,调用它的进程应该检查标志,并根据标志的值从结果对象中获取 rowCount 或输出。


if (result.isOutputAvailable()) {

  // do stuff with result.getOutput()

} else {

  // do stuff with result.getRowCount()

}

不过,创建两个单独的方法可能更简单。


查看完整回答
反对 回复 2022-06-08
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我会简单地使用两种方法,然后重新考虑如何使用这些方法。我会先调用检索行数的方法,然后根据该方法决定是否调用第二个。



查看完整回答
反对 回复 2022-06-08
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号