Class<? extends Entity> Array

pausch

Aktives Mitglied
Hallo Javagemeinde,

Ich muss für mein Programm ein Array von Klassen erstellen, wobei hier nur Klassen einer bestimmten Superklasse vorkommen dürfen. Eclipse meint allerdings "Cannot create a generic array of Class<? extends Entity>.

Wo ist das Problem denn und wie kann ich es lösen?

Danke für euer Interesse, ich weiß nicht ob es helfen würde zu erklären, in welchem Zusammenhang ich das Array brauche, deshalb verzichte ich hier dadrauf, weil das den Rahmen sprengen würde.

Mein Code sieht aktuell folgendermaßen aus:

Java:
//...
private static LinkedList<Class<? extends Entity>> entities = new LinkedList<Class<? extends Entity>>();
//...

public static Class<? extends Entity>[] getEntites(){
		Class<? extends Entity>[] entityArg = new Class<? extends Entity>[entities.size()];
		for(int i=0; i<entityArg.length; i++){
			entityArg[i] = (Class<? extends Entity>) entities.get(i);
		}
		return entityArg;
	}

Mein erster Versuch war folgender, allerdings lief das ganze wegen einer ClassCastException nicht:

Java:
//...
private static LinkedList<Class<? extends Entity>> entities = new LinkedList<Class<? extends Entity>>();
//...

public static Class<? extends Entity>[] getEntites(){
		return (Class<? extends Entity>[]) entities.toArray();
}
 

HimBromBeere

Top Contributor
new Class<? extends Entity>[entities.size()];
Hier steckt das Problem. Du musst einen konstanten Datentyp für die Initialisierung verwenden, und <? extends Entity> ist eben kein konstanter Datentyp. Soviel zur Probelmbeschreibung, da ich das gleiche Problem auch aktuell habe in meiner eigenen Anwendung, kann ich dir aber auch noch nicht weiter helfen :D
 

hdi

Top Contributor
Cannot create a generic array of Class<? extends Entity>
Richtig, deswegen folgender Workaround: Object-Array erzeugen und zum generischen Typ casten:

Java:
Class<? extends Entity>[] entityArg = (Class<? extends Entitiy>[])new Object[entities.size()];

Der Compiler wird dir ne Warning ausspucken. Kannst du aber mit ner @SupressWarnings Annotation ignorieren. Dieses Workaround wird auch in der API an diversen Stellen gemacht, zB bei den Collections.
 

pausch

Aktives Mitglied
Hm, vonwegen perfekt, man sollte erst Testen bevor man in Euphorie ausbricht....

Code:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Class;
	at de.schaefer.mediaManagement.control.DataHandler.getEntites(DataHandler.java:28)
	at de.schaefer.mediaManagement.ui.general.StartView.<init>(StartView.java:41)
	at de.schaefer.mediaManagement.control.viewcontroller.RootController.<init>(RootController.java:38)
	at de.schaefer.mediaManagement.control.Run.main(Run.java:105)
 

hdi

Top Contributor
Ui... stimmt, sorry, zu schnell geantwortet. Ich hatte grad folgendes im Kopf:

Java:
public class C<E>{
   E[] array;
   {
      array = (E[])new Object[10];
   }
}

Das funktioniert nämlich auch. Dein Fall ist wohl komplizierter, da der generische Typ ja im Array-Typ steckt. Boah, was macht man denn da ^^ Lass mich mal n bisschen rumprobieren...

edit: Hauptsache gleich mal wieder das Danke entzogen was??? Du Hund! ;)
 

hdi

Top Contributor
Okay, jetzt aber. War viel zu kompliziert gedacht. Der Array-Typ an sich ist ja nicht generisch, es ist einfach Class. Für die Instantiierung des eigentlichen Arrays spielt der generische Typ von Class keine Rolle.

Java:
Class<? extends Entity>[] entityArg = new Class[entitySize];
 

pausch

Aktives Mitglied
Nach erfolgreichem (!) testenkann ich jetzt auch guten Gewissens schreiben: Perfekt :)

PS. Das 'danke' gibts bei mir nur auf Beiträgen die das Problem gelöst haben :)

Schönen Abend noch und nochmal: Danke!
:D:D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mrStudent <? extends T> und <? super T> Java Basics - Anfänger-Themen 1
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J extends Problem Java Basics - Anfänger-Themen 2
N extends und super vs new object Java Basics - Anfänger-Themen 4
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
J Implements und Extends Java Basics - Anfänger-Themen 5
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
M mehrere extends? Java Basics - Anfänger-Themen 19
J doppelname nach schlüsselwort extends Java Basics - Anfänger-Themen 4
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
T extends und implements Java Basics - Anfänger-Themen 11
Crazynet 2 extends Java Basics - Anfänger-Themen 22
S Wrapper Klasse und extends Java Basics - Anfänger-Themen 2
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
R Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends" Java Basics - Anfänger-Themen 5
K Erste Schritte Extends Implements Java Basics - Anfänger-Themen 4
S Threads Thread wenn extends schon vergeben Java Basics - Anfänger-Themen 8
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
F Anfängerfrage zu extends Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
T Input/Output StructuredFileReader extends BufferedReader Java Basics - Anfänger-Themen 6
K Erste Schritte extends vererbung Java Basics - Anfänger-Themen 15
A final und extends Java Basics - Anfänger-Themen 14
Y Threads extends Thread oder implements Runnable Java Basics - Anfänger-Themen 10
C Vererbung "extends" umgehen mittels Objekterzeugung?! Java Basics - Anfänger-Themen 29
L Implements<-->extends und Interface Java Basics - Anfänger-Themen 10
T Collections Queue<? extends Number> add() offer() Java Basics - Anfänger-Themen 13
S Klasse extends HashMap Java Basics - Anfänger-Themen 20
L Problem mit Vererbung (extends) cannot find symbol Java Basics - Anfänger-Themen 3
D MyActionListener extends Thread Java Basics - Anfänger-Themen 3
H2SO3- Designfragen (mehrfach extends) Java Basics - Anfänger-Themen 11
G Unterschied e extends y vs ? extends y Java Basics - Anfänger-Themen 5
X List von Klasse B als List von Klasse A (B extends A) Java Basics - Anfänger-Themen 2
H extends Locale Java Basics - Anfänger-Themen 4
O import ja....extends nein Java Basics - Anfänger-Themen 5
G Muss es immer extends sein ? Java Basics - Anfänger-Themen 9
N class Test<E extends MyAbstractClass> => typ von E? Java Basics - Anfänger-Themen 5
K mehrere Extends Java Basics - Anfänger-Themen 2
S extends Vector<xyz> Java Basics - Anfänger-Themen 10
S new .() extends JDialog {.} Java Basics - Anfänger-Themen 15
S extends und Konstruktor Java Basics - Anfänger-Themen 8
E Interface extends Observable Java Basics - Anfänger-Themen 13
G Wiedermal vererbung, extends JDialog extends Exception ? Java Basics - Anfänger-Themen 8
U extends JLabel & Thread Java Basics - Anfänger-Themen 2
G Innere klasssen unde "extends" klassen definieren, Java Basics - Anfänger-Themen 2
frau-u JMenu mit extends JPanel? Java Basics - Anfänger-Themen 4
G "extends DBConnection" funktioniert nicht Java Basics - Anfänger-Themen 15
N extends / implements / static, bedeutung ?? Java Basics - Anfänger-Themen 12
C Problem mit Zeichnen auf einer extends Canvas Class... Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben