Hallo Leute,
ich habe mich zur Übung daran versucht, eine Sortierer-Klasse zu implementieren, deren Methoden (bubbleSort, mergeSort, etc) jeweils ein Array eines eigenen Interfaces 'Vergleichbar' entgegennehmen. Beim Testen ist mir dann eine ClassCastException um die Ohren geflogen, die ich nicht ganz nachvollziehen kann. Ein minimalistisches Code-Beispiel (hat nichts mehr mit dem Sortieren zu tun) findet ihr unten.
Ich befürchte, ich habe das Prinzip der Polymorphie falsch verstanden...
Warum verliert das IntRFaceImplementer-Objekt im IntRFace-Array seinen Typ, wenn es in ein neues Array umgespeichert wird? Ist genau dafür nicht die Polymorphie von Java gut?
Hoffe, es kann mir jemand helfen
LG,
Ploflo82
ich habe mich zur Übung daran versucht, eine Sortierer-Klasse zu implementieren, deren Methoden (bubbleSort, mergeSort, etc) jeweils ein Array eines eigenen Interfaces 'Vergleichbar' entgegennehmen. Beim Testen ist mir dann eine ClassCastException um die Ohren geflogen, die ich nicht ganz nachvollziehen kann. Ein minimalistisches Code-Beispiel (hat nichts mehr mit dem Sortieren zu tun) findet ihr unten.
Ich befürchte, ich habe das Prinzip der Polymorphie falsch verstanden...
Code:
Exception in thread "main" java.lang.ClassCastException: [LIntRFace; cannot be cast to [LIntRFaceImplementer;
at ClassCastExceptionTest.<init>(ClassCastExceptionTest.java:6)
at ClassCastExceptionTest.main(ClassCastExceptionTest.java:17)
Java:
class ClassCastExceptionTest {
public ClassCastExceptionTest() {
IntRFaceImplementer [] array = new IntRFaceImplementer[1];
array[0] = new IntRFaceImplementer(42);
array = (IntRFaceImplementer []) doSomething(array);
}
public IntRFace [] doSomething(IntRFace [] arr) {
IntRFace [] ret = new IntRFace[1];
ret[0] = arr[0];
return ret;
}
public static void main(String [] args) {
new ClassCastExceptionTest();
}
}
interface IntRFace {
public int getX(IntRFace other);
}
class IntRFaceImplementer implements IntRFace {
private int x;
public IntRFaceImplementer(int z) {
x = z;
}
public int getX(IntRFace other) {
return ((IntRFaceImplementer) other).x;
}
}
Warum verliert das IntRFaceImplementer-Objekt im IntRFace-Array seinen Typ, wenn es in ein neues Array umgespeichert wird? Ist genau dafür nicht die Polymorphie von Java gut?
Hoffe, es kann mir jemand helfen
LG,
Ploflo82
Zuletzt bearbeitet: