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

标签 java

我有一个旧的Java代码,它有一个返回 Guava ArrayTable<>的方法。现在,我有一个要求,我想检查 arrayTable 中的行数,并且根据行数,我需要决定是否实际获取 ArrayTable。

ArrayTable foo(..args) {}

该方法调用内部 API,我将其结果组合起来形成 ArrayTable。这些内部 API 具有行计数实用程序,可以在没有任何开销的情况下获取行计数。

我的问题是解决这个问题的最佳方法是什么?据我所知,可能有两种方法:

  1. 单独的实用程序: 为该方法创建一个单独的行计数实用程序,它执行相同的操作,除了调用内部 API 的行计数实用程序并返回行计数之外。这会导致重复的代码。
  2. 使用通用返回类型根据额外参数更改返回类型

    T foo(..args, boolean fetchRowCount) {
    
    if (fetchRowCount == true) {
        return (Integer) rowCount;
    }
    else {
        //do the normal thing
        return (ArrayTable<>) output;
    }
    }
    

最佳答案

我建议使用额外的参数重写该方法,并使用现有的方法来获取 arrayTable,并且仅在重写的方法中执行额外的工作(计算行数)。

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

Integer foo(... args, fetchRows) {
    arrayTable = foo(args);
    // do the rest here
}

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

关于java - 是否建议根据参数更改方法的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570950/

相关文章:

java - 为什么Java spring boot logback不记录异常

java - 如何将文本文件内容添加到文本文件包含空格的组合框中?

java - 如何使用 webflux Webclient 创建带参数的请求?

java - 如何从设备文件夹中检索和共享位图

java - 如何使用 POJO 处理来自 kafka lister 的事件?

java - LinkedTransferQueue 线程安全吗?

java - Tomcat Magnolia 5 管理中心面板错误

java - Websphere Java 应用程序启动

java - Excel/OLAP 和 HTTP 基本授权 - Excel 能否记住它已登录?

java - 如何定义一个扩展Map或Collection的通用参数?