gpt4 book ai didi

Java——重构两个几乎相同的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:04 26 4
gpt4 key购买 nike

我有两种方法,一种计算被认为具有低于给定对象的值的对象的数量,另一种计算具有高于给定对象的值的对象的数量。您可能会说,这两种方法实际上是相同的:

public int countHigher(SomeObject a){
if (a == null){
throw etc...
}
int numberHigher = 0;
for (SomeObeject b : this.listOfSomeObjects) {
if (b.compareTo(a) == 1) {
numberHigher++;
}
}
return numberHigher;
}

public int countLower(SomeObject a){
if (a == null){
throw etc...
}
int numberLower = 0;
for (SomeObeject b : this.listOfSomeObjects){
if (b.compareTo(a) == -1){
numberLower++;
}
}
return numberLower;
}

我重构了调用私有(private)方法的方法:

private int coun(SomeObject a, int comparison){
if (a == null){
throw etc...
}
int number = 0;
for (SomeObeject b : this.listOfSomeObjects){
if (b.compareTo(a) == comparison){
number++;
}
}
return number;
}

但我觉得这个解决方案并不令人满意。可以使用无效整数(即 10)调用私有(private)方法,并且针对这种情况的额外错误检查相当难看:

if (comparison < -1 || comparison > 1)
{
throw blah
}

使用 boolean 值也不尽如人意,因为将来我很可能想要计算等值对象的数量。

您有替代的重构解决方案吗?

干杯,

皮特

最佳答案

我会做什么:

  • 为该类型实现一个比较器。
  • 传递该比较器的实例而不是 int comparison 参数。
  • 其中一个计数器会将 Comparator 包装在 Collections.reverseOrder 中。

这将为您提供适当分离的关注点。

关于Java——重构两个几乎相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3171610/

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