Java 无法对类进行强制转换。是装载机的未命名模块

Java 无法对类进行强制转换。是装载机的未命名模块,java,Java,我正在尝试使用链表实现从头创建优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级ADT来自我的Java书籍,我的作业类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试移除min()时,我得到一个无法强制转换的类。。。错误 这是我获取数组、将它们放入队列并删除它们的方法 public static void executeJobs(Job[] jobInputArray) { SortedPriorityQueue pq = new Sor

我正在尝试使用链表实现从头创建优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级ADT来自我的Java书籍,我的作业类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试移除min()时,我得到一个无法强制转换的类。。。错误

这是我获取数组、将它们放入队列并删除它们的方法

public static void executeJobs(Job[] jobInputArray) {

    SortedPriorityQueue pq = new SortedPriorityQueue();
    
    for(int j = 0; j < jobInputArray.length; j++) {
        pq.insert(jobInputArray[j].getFinalPriority(), jobInputArray[j]);
        jobInputArray[j].setEntryTime(j+1);
    }
    
    int cycles = 0;
    
    while(!pq.isEmpty()) {
        Job currentJob = (Job) pq.removeMin();
        System.out.println(currentJob.getJobName());
    }
}
公共静态void executeJobs(作业[]作业输入阵列){
SortedPriorityQueue pq=新的SortedPriorityQueue();
对于(int j=0;j
问题出现在我的作业上:Job currentJob=(Job)pq.removeMin();线路

这是我的SortedPriorityQueue类:

public static class SortedPriorityQueue<K,V> extends AbstractPriorityQueue<K,V>{
private PositionalList<Entry<K,V>> list = new LinkedPositionalList<>();

public SortedPriorityQueue() { super(); }
public SortedPriorityQueue(Comparator<K> comp) {super(comp);}

public Entry<K,V> insert(K key, V value) throws IllegalArgumentException{
    checkKey(key);
    Entry<K,V> newest = new PQEntry<>(key,value);
    Position<Entry<K,V>> walk = list.last();
    
    while(walk != null && compare(newest, walk.getElement()) < 0)
        walk = list.before(walk);
    if(walk == null)
        list.addFirst(newest);
    else
        list.addAfter(walk, newest);
    return newest;
}
public Entry<K,V> min(){
    if (list.isEmpty()) return null;
    return list.first().getElement();
}

public Entry<K,V> removeMin(){
    if(list.isEmpty()) return null;
    return list.remove(list.first());
}
public int size() {return list.size();}
公共静态类SortedPriorityQueue扩展了AbstractPriorityQueue{
私有位置列表=新的LinkedPositionList();
公共排序优先级队列(){super();}
公共排序优先级队列(比较器comp){super(comp);}
公共条目插入(K键,V值)引发IllegalArgumentException{
检查键(key);
条目最新=新条目(键、值);
Position walk=list.last();
while(walk!=null&&compare(最新,walk.getElement())<0)
步行=列表。之前(步行);
if(walk==null)
列表。addFirst(最新);
其他的
list.addAfter(walk,最新);
返回最新版本;
}
公开进入(分钟){
if(list.isEmpty())返回null;
返回list.first().getElement();
}
公共条目removeMin(){
if(list.isEmpty())返回null;
return list.remove(list.first());
}
public int size(){return list.size();}
}


非常感谢您的帮助。。提前谢谢

removeMin
返回一个
条目
,而不是
作业
。它不能转换为
作业
Entry
的实现缺失,但我假设它有一个
value()
getValue()
方法:

Job currentJob = (Job) pq.removeMin().getValue();

请在问题中添加准确的错误消息。线程“main”java.lang.ClassCastException中的异常:类helloworld.helpers$AbstractPriorityQueue$PQEntry不能强制转换为类helloworld.Job(helloworld.helpers$AbstractPriorityQueue$PQEntry和helloworld.Job在加载程序的未命名模块中)removeMin返回什么类型?在你的情况下,K和V的实例化是为了什么?天哪,我太蠢了。。。我真的整天都在玩这个。我不知道为什么它没有点击me@FalseOccasion如果使用
新建SortedPriorityQueue()
实例化队列,则根本不需要强制转换
getValue()
将已返回正确的类型。如果可以避免,就不要使用原始类型。明白了!问一个简单的问题,但是有没有一种方法可以迭代优先级队列,我使用一个扩展的for循环来搜索一个值?@FalseCase:让您的类实现