Java类转换异常泛型
我试图在Java中创建任务的优先级队列,但在优先级队列的构造函数中遇到了类强制转换异常。这是我的任务类:Java类转换异常泛型,java,class,generics,casting,priority-queue,Java,Class,Generics,Casting,Priority Queue,我试图在Java中创建任务的优先级队列,但在优先级队列的构造函数中遇到了类强制转换异常。这是我的任务类: public class Task <E,T extends Integer> { private E job; private T priority; public Task(E job, T priority) { this.job = job; this.priority = priority; }
public class Task <E,T extends Integer>
{
private E job;
private T priority;
public Task(E job, T priority)
{
this.job = job;
this.priority = priority;
}
public String toString()
{
return "Job Name: "+ job + " Priority: "+priority;
}
}
在优先级队列构造函数的第二行抛出错误:
public class PriorityQueueCustom <E,T extends Integer>
{
private Task<E,T>[] heap;
private int heapSize,capacity;
public PriorityQueueCustom(int capacity)
{
this.capacity = capacity + 1;
heap = (Task<E,T>[]) new Object[capacity];
heapSize = 0;
}
我不明白的是,为什么我不能将对象强制转换为任务,因为任务应该自动扩展对象,但我是泛型新手,所以我不确定是否正确设置了泛型
以下是我创建优先级队列的方式:
PriorityQueueCustom<String,Integer> queue = new PriorityQueueCustom<String,Integer>(10);
下面是生成的异常:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueueCustom$Task;
at PriorityQueueCustom.<init>(PriorityQueueCustom.java:28)
at PriorityQueueTester.main(PriorityQueueTester.java:5)
对象[]不扩展任务[]。也就是说,任何对象的数组都不是任务的数组,相反才是真的
您必须创建任务数组:
或者,为避免未选中强制转换,请列出任务列表:
List<Task<E,T>> tasks = new ArrayList<>();
您正在将对象数组强制转换为任务数组。无法执行此操作,因为对象[]不是任务[]的实例。为什么不首先创建一个任务数组呢?您可以共享您得到的异常吗?请参见“是”,使用一个列表,或者更好地使用一个LinkedList,您可以在O1时间内从中获取尾部元素。泛型和数组不能很好地结合在一起。@Bohemian ArrayList几乎在所有情况下都胜过LinkedList。即使是理论上应该在实践中更快的事情也不是。ArrayList和ArrayQue应为默认值。在这种特殊情况下,堆实现将需要随机访问,因此ArrayList是一个明确的选择。
List<Task<E,T>> tasks = new ArrayList<>();