gpt4 book ai didi

Java - 仅使用可比较的接口(interface)比较两个字段

转载 作者:行者123 更新时间:2023-12-02 02:14:41 26 4
gpt4 key购买 nike

我尝试仅使用 Comparable 接口(interface)来比较两个字段(字符串和整数)。这是我第一次使用它,我不知道在哪里放置第二个字段来比较值。

public int compareTo(Object o) throws ClassCastException
{
int count = 0;
int compareName = this.lastName.compareTo(((SalePerson) o).getLastName());
int compareSales = Integer.compare(this.totalSales, ((SalePerson) o).getTotalSales());

if(!(o instanceof SalePerson))
{
throw new ClassCastException("A SalePerson object expected.");
}

if((this.totalSales < ((SalePerson) o).getTotalSales()))
{
count = -1;
}

else if((this.totalSales > ((SalePerson) o).getTotalSales()))
{
count = 1;
}

return count;
}

最佳答案

如果要实现Comparable接口(interface),则不必抛出ClassCastException,因为o必须是SalePerson >,否则会出现编译错误。

你可以这样做:

public class SalePerson implements Comparable<SalePerson>{

@Override
public int compareTo(SalePerson o) {
int totalSalesCompare = Integer.compare(this.totalSales, o.getTotalSales());
return totalSalesCompare == 0 ? this.lastName.compareTo(o.getLastName())
: totalSalesCompare;

}
}

此外,建议将 compareToequalshashCode 一起使用:

@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (!(o instanceof SalePerson)) {
return false;
}
return Integer.compare(Integer.compare(this.totalSales, o.getTotalSales())) == 0
&& this.lastName.equals(o.getLastName());
}

@Override
public int hashCode() {
return this.lastName.hashCode() * 31 + this.totalSales;
}

关于Java - 仅使用可比较的接口(interface)比较两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472769/

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