gpt4 book ai didi

java - 如何比较 Java 中的类和继承类

转载 作者:搜寻专家 更新时间:2023-11-01 01:38:23 24 4
gpt4 key购买 nike

我有两个类 - Task(实现 Comparable)和 DeadlinedTask(其中 DeadlinedTask 扩展了 Task)。对于它们中的每一个,我都编写了一个重载的 compareTo 函数(每个函数都有 compareTo(Task) 和 compareTo(DeadlinedTask))。

我的想法是,我可以按类别对普通任务进行排序,按截止日期对 DeadlinedTasks 进行排序,但我还希望所有 DeadlinedTasks 都排在任务之上。

当我在只有任务(没有 DeadlinedTasks)的列表上调用 Collections.sort(myListOfTasks) 时,一切都非常有效。但是,当我同时拥有 Tasks 和 DeadlinedTasks 的列表时,对象会更改顺序,但它们并未完全排序。

我曾尝试在类间比较中返回 1 以外的数字(1、1000、1000000 都做了同样的事情)。有什么方法可以通过 compareTo 和 Collections.sort 做到这一点,我可以使用不同的 java 功能,还是我必须编写自己的搜索函数(作为比较器?)?

任务比较方法:

public int compareTo(Task other){
if(this.GetCategory().compareTo(other.GetCategory())==0)
return this.GetName().compareTo(other.GetName());
else
return this.GetCategory().compareTo(other.GetCategory());
}
public int compareTo(DeadlinedTask other){
return 1;
}

DeadlinedTask compareTo 方法:

public int compareTo(Task other){
return -1;
}
public int compareTo(DeadlinedTask other){
if(this.GetDeadline().compareTo(other.GetDeadline())==0)
return this.GetName().compareTo(other.GetName());
else
return this.GetDeadline().compareTo(other.GetDeadline());
}

感谢您的帮助

最佳答案

... or do I have to write my own search function (as a Comparator?)?

是的。我认为这是最好的方法。

处理equalscompareTo 的正常方法是返回false(对于equals)或抛出ClassCastException(对于 compareTo)如果参数的实际类型与 this 的实际类型不匹配。

如果您尝试为子类型实现equalscompareTo,您可以轻松创建语义异常,例如:

  • a.equals(b)b.equals(a) 返回不同的值,或者
  • a.compareTo(b)b.compareTo(a) 返回不一致的值。

避免这些异常需要让父类(super class)型知道子类型。从设计的角度来看,这很糟糕,因为它限制了您将来创建更多子类型的能力。

对于您需要实现对两个或多个不同类的实例进行排序的规则的用例,Comparator 是最佳解决方案。

关于java - 如何比较 Java 中的类和继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983646/

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