我的IDE发出了一个奇怪的警告,但代码仍然正常运行。
代码是
class TaskQueue<T extends Comparable> {
private final PriorityQueue<QueueItem<T>> queue =
new PriorityQueue<>(Comparator.comparing(QueueItem::getDeadline));
}
IDE给了我一个警告和错误:
警告
Unchecked call to 'PriorityQueue(Comparator<? super E>)' as a member of raw type 'java.util.PriorityQueue'
错误引用QueueItem::getDeadline
Non-static method cannot be referenced from a static context
我是Java的新手,尽管代码有效,但我想知道我是否可以用更好的方式编写它,或者是否有正确的方法。
谢谢
QueueItem
class QueueItem<T extends Comparable>{
private final T deadline;
QueueItem(T deadline) {
this.deadline = deadline;
}
T getDeadline() {
return deadline;
}
}
答案 0 :(得分:2)
不应该QueueItem
看起来有点不同(TaskQueue也是如此):
QueueItem<T extends Comparable<T>>
注意T extends Comparable<T>
Comparable是一种泛型类型,但在您的代码中,您没有指定Comparable
的类型;相反,它是原始的。
答案 1 :(得分:1)
方法QueueItem::getDeadline
返回某种未实现Comparable
的对象。
所以解决方案将是:
class Deadline implements Comparable<Deadline> {
@Override
public int compareTo(Deadline o) {
return 0 /* Some comparing logic here */;
}
}
Comparator.comparing
期望返回Comparable
个对象。