Java 为什么要在compareTo(对象)中进行强制转换
这是我在课堂上编程作业的代码。我不知道为什么我使用Java 为什么要在compareTo(对象)中进行强制转换,java,comparable,Java,Comparable,这是我在课堂上编程作业的代码。我不知道为什么我使用Task other=(Task)x或者它在这里做什么。其余的我都明白。如果有人能快速解释一下这到底是怎么回事,我会非常感激的。谢谢大家! 您正在将Object x强制转换为Task other-Object和Task是不同的类型,因此您需要强制转换,以便将x视为预期类型(并访问其字段) 通常在compareTo()中,您首先会得到类似于if(任务的x实例)的内容在盲目强制转换之前-如果你不这样做,并且类型不同,那么事情就会崩溃)方法签名采用对象
Task other=(Task)x代码>或者它在这里做什么。其余的我都明白。如果有人能快速解释一下这到底是怎么回事,我会非常感激的。谢谢大家! 您正在将Object x
强制转换为Task other
-Object
和Task
是不同的类型,因此您需要强制转换,以便将x
视为预期类型(并访问其字段)
通常在compareTo()
中,您首先会得到类似于if(任务的x实例)的内容
在盲目强制转换之前-如果你不这样做,并且类型不同,那么事情就会崩溃)方法签名采用对象
类型对象,以便引用传入对象中的变量优先级
,它必须对任务
对象执行强制转换,因为变量仅存在于任务
类中
但就我个人而言,我认为这是一种糟糕的做法,因为您不知道传入的是什么类型的对象(可以传入任何类子类化object
),所以检查实例不会出错,除非您希望遇到ClassCastException的运行时错误
或者,您可以使用来指定要与哪种类型的对象进行比较。所以与其这样做
public int compareTo(Object x) {
Task other = (Task)x;
if (other.priority == this.priority) {
System.out.println("Each task has the same priority level.");
return 0;
} else if (other.priority > this.priority) {
System.out.println(other.priority + "\n" + this.priority);
return -1;
} else {
System.out.println(this.priority + "\n" + other.priority);
return 1;
}
}
公共类任务实现可比较{
私有int优先级=1;
@凌驾
公共整数比较对象(对象o){
如果(o任务实例){
任务t=(任务)o;
返回this.priority
…你可以这样做
public class Task implements Comparable {
private int priority = 1;
@Override
public int compareTo(Object o) {
if (o instanceof Task) {
Task t = (Task) o;
return this.priority < t.priority;
}
return -1;
}
}
公共类任务实现可比较{
私有int优先级=1;
@凌驾
公共整数比较(任务t){
返回this.priority
。。。因为这不会发生,所以如果你比较一个任务和一个字符串,就会出现严重错误。@SarahDiri:如果这个答案对你有帮助,请接受:)我能把对象x
改成更具体的东西吗(在这种情况下,任务x
可能)?课程本身给我的印象是,这只是“如何完成”。@SarahDiri将x
从Object
更改为Task
的唯一两种方法是执行强制转换(您已经在执行)或更改方法参数,使其仅允许Task
对象作为参数传入。Java通过使用泛型实现了这一点(因此实现了Comparable
而不是实现了Comparable
)。使用此选项只允许传入任务
对象。另请参见您是否正在实现可比
或其他接口?如果是这样的话,就值得添加类声明。
public class Task implements Comparable<Task> {
private int priority = 1;
@Override
public int compareTo(Task t) {
return this.priority < t.priority;
}
}