ClassCastExceptionを理解するのに苦労していますが、コメントされている行がクラッシュしています。なぜそのことを説明してください?おかげClassCastExceptionを別のオブジェクトで処理する
public class tester {
private static B<Data> build(char[] ss, double[] f) {
B<Data> res = new B<Data>();
PriorityQueue<String> q = new PriorityQueue<String>();
...
double c_x = 20.1;
Data h = res.getElement(); //throws ClassCastException
if(h.getFreq()==c_x){
...
}
}//end of method
}//end of class tester
public class Data{
private char symbol;
private double freq;
public Data(char c, double f){
symbol = c;
freq = f;
}
public char getSymbol(){
return symbol;
}
public double getFreq(){
return freq;
}
public String toString(){
return freq + ":" + symbol;
}
public int compareTo(Data o) {
return (int) (this.freq-o.freq);
}
}//end of class Data
public class B<T> {
// the fields
private T element;
private B<T> left;
private B<T> right;
// create an empty node
public B() {
this(null, null, null);
}
public B(T theElement, B<T> lt, B<T> rt) {
element = theElement;
left = lt;
right = rt;
}
// return the element
public T getElement() {
return element;
}
public void setElement(T x) {
element = x;
}
}//end of class B
例外:
Exception in thread "main" java.lang.ClassCastException: java.lang.Double cannot be cast to Data
at tester.build(tester.java:40)
at tester.main(tester.java:83)
あなたはあなたにも何を得るのエラーメッセージ投稿することができますか?何らかの形で 'Data'ではないオブジェクトが' res'に入りました。 –
スレッド「main」の例外java.lang.ClassCastException:java.lang.Doubleをデータにキャストできません \t tester.build(tester.java:40) \t at tester.main(tester.java:83)My行番号はあなたのものとは異なりますが、クラッシュします。 –
res.getElement()は、DataオブジェクトではないDouble値です。この文脈でBが何であるかはわかりません。あなたはBのgetElement()の実装をチェックし、それが何を返すのか見てみることができますか? –