Javaでタスクの優先度キューを作成しようとしていますが、優先度キューのコンストラクタでクラスキャスト例外が発生しました。ここに私のタスククラスです: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 String toString()
{
return "Job Name: "+ job + " Priority: "+priority;
}
}
エラーが優先キューのコンストラクタの2行目にスローされます:
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;
}
私は、オブジェクトをキャストすることはできませんなぜ私が理解していないことですタスクは自動的にオブジェクトを拡張する必要がありますが、ジェネリックスを初めて使用しているので、正しく設定したかどうかわかりません。
これは私がプライオリティキューを作成する方法である:
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)
:
あるいは、未チェックのキャスト、タスクのリストを避けるためにタスク。 'Object []'は 'Task []'のインスタンスではないので、これはできません。最初に 'Task'の配列を作成してみませんか? – johnnyaug
あなたは例外を共有できますか? – Mureinik
も参照してください。http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java –