我的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;
    }
}

最佳答案

QueueItem看起来应该不一样(TaskQueue也一样):

 QueueItem<T extends Comparable<T>>


注意T extends Comparable<T>

Comparable是一种通用类型,但是在您的代码中,您没有指定该Comparable的类型。相反,它是原始的。

10-06 02:45