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;
}
}
这是我为课程编程分配的代码。我不确定为什么我会使用Task other = (Task)x;
或者它在这里做什么。其余的我明白了。如果有人能快速解释这里的实际行动,我会很高兴。谢谢!
答案 0 :(得分:2)
您将Object x
投射到Task other
- Object
和Task
是不同的类型,因此您需要投射,以便将x
视为预期输入(并获取它的字段)。
通常在compareTo()
中你会先盲目地投射if (x instanceof Task)
之类的东西 - 如果你不这样做,那么类型会不同,那么事情会崩溃)
答案 1 :(得分:2)
方法签名采用Object
类型对象,因此为了引用传入的对象中的变量priority
,它必须作为变量对Task
对象进行强制转换仅存在于Task
类中。
就个人而言,我认为这是不好的做法,因为你不知道传递了什么类型的对象(任何类子类Object
都可以传入)所以检查的实例不会更糟糕您希望遇到ClassCastException的运行时错误。
或者,您可以使用generics指定要与之比较的对象类型。所以不要这样做......
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;
}
}
......你可以这样做......
public class Task implements Comparable<Task> {
private int priority = 1;
@Override
public int compareTo(Task t) {
return this.priority < t.priority;
}
}