Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class FahrzeugListe<Type extends Fahrzeug & Verkaeuflich> {
private Type[] array;
private int nextFreeSlot = 0;
public FahrzeugListe(int capacity) {
array = (Type[] new Object[capacity];
}
...
}
public static void main(String[] args) {
FahrzeugListe<Pkw> listeF2 = new FahrzeugListe<Pkw>(100);
listeF2.add(new Pkw(...));
...
}
Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Lklassen.Fahrzeug; ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; [Lklassen.Fahrzeug; is in unnamed module of loader 'app')
at klassen.FahrzeugListe.<init>(FahrzeugListe.java:20)
at programme.GenericDemo.main(GenericDemo.java:49)
Object erfüllt nicht die Anforderungen bezüglich extends Fahrzeug und Verkäuflich. Daher lässt sich dieser Cast so nicht machen. Wenn Du auf das Verkäuflich verzichten könntest, dann könntest Du da ein
Java:
array = (Type[]) new Fahrzeug[capacity];
sagen.
Aber da es Fahrzeug und Verkäuflich ist, ist dies meiner Meinung nach nicht möglich. Muss es denn unbedingt ein Array sein? Würde nicht eine Collection auch gehen?
Ansonsten wäre denkbar:
Java:
import java.io.*;
import java.lang.reflect.Array;
public class Test<Type extends String & Serializable> {
Type[] testArray;
int pointer = 0;
public Test(Class<Type> clazz, int capacity) {
testArray = (Type[]) Array.newInstance(clazz, capacity);
}
public void add(Type value) {
testArray[pointer] = value;
pointer++;
}
public static void main(String[] args) {
Test<String> test = new Test(String.class, 100);
test.add("abc");
}
}
Ich habe hier jetzt einfach einmal Fahrzeug und Verkaufbar ersetzt mit Klassen / Interfaces, die so zur Verfügung stehen ... Aber das Prinzip sollte erkennbar sein.
Vielen Dank. Für Deine Antwort. Ich habe die Änderung im Konstruktor übernommen und schon funktionierte es.
Die Implementierung des interfaces Verkaeuflich führte aber zu keinem Problem.
In einer anderen Methode musste ich noch eine NullPointerException einfügen so dass meine Klasse vollständig funktionierte.