我有一个旧的Java代码,它有一个返回 Guava 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; } }
最佳答案
我建议使用额外的参数重写该方法,并使用现有的方法来获取 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/