Klassen Array aus Klassen bestimmter Klassen ?

musicmatze

Mitglied
Hallo ihr!

Folgendes Problem: Ich habe eine Vererbungshirarchie mit mehreren Ebenen. Alle Klassen im package haben (selbstverständlich) die gleiche superclass.

jetzt möchte ich in einer (anderen) Klasse dynamisch Instanzen von einer bestimmten Klasse während der Laufzeit machen.

Dazu muss ich wissen, was für Klassen ich habe. Meine Klasse, die Instanzen erzeugen soll sieht in etwa so aus:

Java:
package de.irgendwas.ladeklasse;
import de.irgendwas.ladmich.*;
public class LadeKlasse { 
Class[] ladmichklassen;
public LadMichKlasse getInstance( String ladmichsubclassname ) {
}
}

ich brauch praktisch ein Array der Klassen, die ich instanzieren können will.
Wie löse ich das? Ich hab leider keinerlei ansatz, wie sowas in Java zu lösen ist!

Ausserdem muss ich natürlich noch irgendwo herbekommen, welche Klassen ich denn laden lassen kann... praktisch alle klassen eines bestimmten packages bekommen. Das wäre dann die zweite Frage, wie ich das während der Laufzeit hinbekomme!

Wäre sehr erfreut, wenn ihr mir da ne Starthilfe geben könntet!
musicmatze
 
G

Gast2

Gast
Sowas wie
Java:
if (ladmichsubclassname.equals("Test")) {
    return new Test();
} else if (ladmichsubclassname.equals("Test2")) {
    return new Test2();
} else ...
suchst du sicherlich nicht oder?
Ansonsten werfe ich mal Reflection in den Raum. Damit kannst du dir imho alle Klassennamen eines packages holen und auch Instanzen von denen erzeugen.
 

mimo

Aktives Mitglied
Hallo,

ich versteh zwar nicht, wofür Du so etwas brauchst, aber so eine Struktur packst du am besten in eine Map…


Java:
private HashMap<String, Class> map = new HashMap<String, Class>();

private void initMap(){
    map.put("MeineKlasse", MeineKlasse.class);
    ...
}

public Class getClass(String clazz) throws Exception{
    if(map.contains(clazz){
       return map.get(clazz);
    ) else (
       throw new Exception("Klasse " + clazz + " existiert nicht");
    )
}
 

musicmatze

Mitglied
Danke mimo, sollte so tun!

Jetzt noch eine Stufe weiter:

Ich bekomme einen Wert, an welchem ich entscheide, welche Klasse ich instanzieren möchte.
Jede Klasse, die zu instanzieren ist, hat ein Array von Werten (String), an dem ich erkennen kann, ob sie diese ist, die ich instanzieren soll.

code:
Java:
public class MachneInstanzVonMir extends Instanzierbar { 
  private static String[] aberNurBei = new String[] { "Hallo", "welt" };

  public static getAberNurBei() {
    return aberNurBei;
  }
}

heisst am Beispiel, dass ich nur eine Instanz von der Klasse will, wenn der Wert den ich bekomme in diesem "aberNurBei" Array steckt.
Folglich brauche ich ja eine Möglichkeit, das an der Klasse abzufragen. Also muss ich die get.. Methode von der Klasse aufrufen.
Habe ich auch schon alles implementiert, kommt dann der Compilerfehler, dass es die methode getAberNurBei() nicht bei Class gibt. Deswegen brauche ich ein Array von Klassen vom Typ Instanzierbar.
Das war meine Überlegung.
Wie kann ich sowas lösen?

Danke schonmal bis hierhin!
musicmatze
 

mimo

Aktives Mitglied
Ich versteh noch nicht ganz, wo Du eigentlich hin willst und warum. Kannst Du nicht mal etwas genauer beschreiben, welches Problem Du eigentlich lösen möchtest? Vielleicht kann ich Dir dann einen anderen Lösungsweg vorschlagen. Mir will im Moment einfach kein Grund einfallen, der eine solche Vorgehensweise rechtfertig.
 
B

bygones

Gast
was auch immer du machen willst, entweder du instanziierst das objekt und ueberpruefst dann, oder du versuchst ueber Reflection auf die Felder bzw methoden zuzugreifen und dann zu ueberpruefen.

das mit der map brauchst du nur wenn du das class objekt an sich haben willst, wenn du eine instanz der jeweiligen klasse erstellen willst dann brauchst du das nicht, dann reicht ein einfaches Class.forName(String className) aus
 

musicmatze

Mitglied
Ich versteh noch nicht ganz, wo Du eigentlich hin willst und warum. Kannst Du nicht mal etwas genauer beschreiben, welches Problem Du eigentlich lösen möchtest? Vielleicht kann ich Dir dann einen anderen Lösungsweg vorschlagen. Mir will im Moment einfach kein Grund einfallen, der eine solche Vorgehensweise rechtfertig.

Das Projekt ist ein Musikplayer, der über ein Protokol per Netzwerk gesteuert wird (etwa wie mpd, falls bekannt).

Es geht also darum, dass ich eine (Netzwerk)Schnittstelle Befehle bekomme. Diese Befehle werden in einem Protokol festgelegt. Ich will jetzt praktisch basierend auf dem Befehl ein Objekt einer Klasse erzeugen.

package Hirarchie wäre:
Command.java
-DatabaseCommand.java
(...)
-SoundCommand
--PlayCommand.java
--PauseCommand.java
--ResumeCommand.java
(...)
-PlaylistCommand.java
(...)

Ich bekomme jetzt also ein Kommando rein, welches ich in ein Objekt verpacken will, das ich dann hin- und herschieben kann und dann irgendwann die wirkliche Aktion machen lasse. Ich weis natürlich noch nicht, ob ich jetzt ein SoundCommand machen muss, oder ein DatabaseCommand. Deswegen brauche ich alle Commands, welche in der Klasse selbst haben, bei welchen Flags (also Stringförmigen Kommandos) sie nötig sind.

Vielleicht, wenn jemand lust hat, sich den Grauss anzugucken, ist hier der Sourcecode:
github.com/matthiasbeyer/ms

relevante packages/klassen wären:
de.beyermatthias.musicserver.module.controller.CommandLoader
de.beyermatthias.musicserver.command.Command.java
und zb.:
de.beyermatthias.musicserver.command.sound.isActiveCommand;

Die Entsprechende *Command Klasse bekommt immer ein MusicServerClass Objekt, auf das es dann die entsprechende Methode rennen lässt. Bei einem Command aus dem package suond wäre das eben das entsprechende Backend vom GStreamer. Hintergrund davon ist, dass ich später vielleicht mal mehrere Soundbackends rennen lassen können will.

Das ganze gedöhns mit den *Command Klassen mache ich deshalb, weil ich einfaches switchen total unschön finde und so lerne ich auchnoch was dazu hoff ich.
Ausserdem denke ich, dass das ganze dann relativ einfach erweiterbar ist...
Ich hoffe, der Code ist nicht totaler Crap so styletechnisch und vom Aufbau her! Für Ratschläge und konstruktive Kritik bin ich sehr dankbar!

Grüße,
musicmatze
 

musicmatze

Mitglied
Warte mal, du machst für jede Anweisung eine eigene Klasse? Soll das eine Art Proxy Pattern werden? Take control with the Proxy design pattern - JavaWorld

Im Endeffekt ja, es gibt halt mehrere Möglichkeiten eine Anweisung auszudrücken. (Eben "MachMalFoo" oder "MachFoo", also nur verschiedene Schreibweisen).

Ich hab den Link jetzt noch nicht gelesen, möchte aber trotzdem sagen, dass das ganze kein RemoteProcedureCall werden soll! (Im Endeffekt wird es dass dann schon, aber ich möchte keinen vorgefertigten benutzen (auch aus Lerngründen)!

Ich guck mir den Link mal an...
 

musicmatze

Mitglied
Mir ist da soeben eine "Lösungsmöglichkeit" gekommen:

Ist zwar ein kleines wenig unschön, weils halt mehr Rechenzeit braucht (annahme meinerseits!), aber man könnte ja eine HashMap machen mit

Java:
HashMap<Class, String[]>
oder? Dann würde ich jede Klasse einfach einmal instanzieren, mir die Keys holen, die ich benötige um zu wissen, welche Klasse ich instanzieren müsste und danach alle Objekte wieder wegwerfen.

Wäre mehr oder weniger eine Notlösung, aber auf alle Fälle machbar.
 

Michael...

Top Contributor
Wenn, dann würde ich es umgekehrt machen. Die Strings als einzelne key und die Klasse als value - ist ja nicht schlimm, wenn mehrere keys auf die selbe Klasse verweisen.
 

musicmatze

Mitglied
Soooo
ich hab das ganze jetzt mal so Pi-Mal-Daumen gelöst.
Compiler spuckt keine Errors mehr aus, dass sollte schonmal eine gute Nachricht sein.

Wens interessiert, was ich getan habe, hier die Commits:

https://github.com/matthiasbeyer/ms/commit/d69800e65387075685991db49ed88a2430ecf861

und der übliche Compilererrorfixstuff:

https://github.com/matthiasbeyer/ms/commit/c4a9f8666cb36d9b543c8649c7d3e16e2842b88d

Jeder bessere Lösungsvorschlag würde mich zu Freudensprüngen bringen!
Benchmarken werde ich das bei Gelegenheit auchnoch!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
J Array von Klassen Allgemeine Java-Themen 2
MQue array in anderen Klassen verfügbar machen Allgemeine Java-Themen 8
B Array über Klassen Allgemeine Java-Themen 7
P Baumstruktur aus klassen/ Array Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
parrot Array Aufgabe Allgemeine Java-Themen 3
N String Array Eingabe Allgemeine Java-Themen 6
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
A Array Problem Allgemeine Java-Themen 8
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
F Datei in String-Array einlesen Allgemeine Java-Themen 8
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
F 3 Dimensionales Array mit Allgemeine Java-Themen 9
M Steueralgorithmus verwandelt Array in Anfangszustand Allgemeine Java-Themen 9
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
T Objekt in Array packen Allgemeine Java-Themen 6
M Zahlen in Array anordnen Allgemeine Java-Themen 8
M Eclipse Unvollständigen Array ansteuern Allgemeine Java-Themen 2
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
R convert 2d array list to 2d array Allgemeine Java-Themen 1
J json Array würfel Spalten durcheinander Allgemeine Java-Themen 9
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
L Datentypen 3D Array Allgemeine Java-Themen 3
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
Mario1409 Methoden JSON Array von URL Allgemeine Java-Themen 8
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
M Zweidimensionales Array mit Binärzahlen füllen Allgemeine Java-Themen 8
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
J Wie kann ich ein Java Array als Säulendiagramm ausgeben? Allgemeine Java-Themen 2
Z 2D Array Pixels reparieren Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
B Polibios Array erweitern Allgemeine Java-Themen 1
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
J Array-List Bubble-Sort Allgemeine Java-Themen 12
4 Variablen Int-Array Int Zuweisen Allgemeine Java-Themen 7
J Array Allgemeine Java-Themen 8
Z Array mit unterschiedlichen Werten Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
A Vector Strings in Array splitten Allgemeine Java-Themen 6
I Muster in Array suchen Allgemeine Java-Themen 10
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben