Klasse Dynamisch laden und zurückgeben

Status
Nicht offen für weitere Antworten.

planetenkiller

Aktives Mitglied
hallo,

Ich möchte eine Klasse zur Laufzeit laden eine Instanz erzeugen und diese Instanz zurückgeben. Leider verstehe ich das Reflection und Generics zeug nicht wirklich.

Es muss doch irgend eine Möglichkeit geben, das eine Funktion den Namen einer klasse bekommt, und dann eine Instanz zurückgibt?

folgendes habe ich:
Code:
public ??? getModul(String name) 
{
        Class klasse = Class.forName("packet.modules."+modul);
        // und jetzt?
}


// aufruf:
MeinModul klasse = getModul("MeinModul"); 
// so hatte ich das gedacht, bin mir aber nicht sicher ob es überhaubt so geht wie ich will
 

Yzebär

Bekanntes Mitglied
Probier es doch mal mit
Code:
return klasse.newInstance();
Rückgabewert ist dann ein Object, das du später in den Typ casten mußt, den du tatsächlich verwenden willst (zB in die Superklasse, von der deine dynamisch geladenen Klassen ableiten bzw. in das Interface, das alle dynamish geladenen Klassen implementieren). Wenn du keine Superklasse oder kein Interface benutzt, mußt du über Reflection auf Methoden und Member zugreifen.
 

thE_29

Top Contributor
Blöd ist halt wenn du keinen defaultConstructor hast!
Dann musst du dir die Konstruktoren zurückholen!
 
S

SlaterB

Gast
es macht im Quellcode technisch gesehen keinen Sinn, generisch zu casten
(diese beiden Begriffe schließen sich gegenseitig aus)
daher gehts auch nicht,
 

thE_29

Top Contributor
Außerdem wenn du den Klassenamen angibst, musst du auch eine Quelle angeben..

Von daher weißt du/kennst du die Klasse und daher ist das ja nicht mehr dynamisch casten!
 

planetenkiller

Aktives Mitglied
Das ist ja mega dof. Dann kann ich nicht mal eine Klasse zur laufzeit laden und dann via Variable/Referenz auf die Metoden zugreifen(Wobei die namen der Metoden nicht immer gleich sind).
 
S

SlaterB

Gast
poste doch mal Pseudo-Code, wie du dir den Zugriff vorstellst,
dann kann man
a) den Unsinn dieses Versuches zeigen (selbst wenn es gehen würde)
oder
b) die korrekte Syntax dafür andeuten
 

planetenkiller

Aktives Mitglied
Wie oben beschrieben, soll mir die Funktion ein Objekt(richtig gecastet natürlich, nicht ein Object) zurückgeben. Das ich dann ganz normal mit

klasse.funktion("parameter", "parameter1");

zugreifen kann. Mit Reflection und klasse.getClass().getMethod..... zugreifen finde ich dof, ich will mit der Klasse/Objekt richtig arbeiten.
 
S

SlaterB

Gast
also ganz normal casten, das geht natürlich

MeinModul klasse = (MeinModul) getModul("MeinModul");

denn wenn du normale Operationsaufrufe hinschreiben willst, musst du ja die Klasse kennen,
also kannst du auch normal aus diese Klasse casten
 

planetenkiller

Aktives Mitglied
Den Namen der Klasse die ich laden will zb "MeinModul" ist in einer Variable gespeichert, und kann sich ändern. Daher kann ich die Rückgabe von getModul nicht casten?!
 
S

SlaterB

Gast
du drehst dich im Kreis: wenn du den Namen nicht hast, dann bringt dir auch das Casten nix (selbst wenn es ginge),
denn dann ist eine Codezeile wie

Code:
// aufruf: 
MeinModul klasse = getModul("MeinModul"); 
// so hatte ich das gedacht, ..
Quatsch

oder meinst du, dass zwar "MeinModul" in der Variablen steht,
du aber trotzdem auf MeinModul casten willst?
wie denn nun?
 

planetenkiller

Aktives Mitglied
ja, ich habe in einer Variable den Namen einer Klasse. Eine Funktion soll eine Instanz der Klasse mit den Namen zurückgeben.

Verständlich genug?
 
S

SlaterB

Gast
soweit ist schon lange klar
Object o = getModul("MeinModul");
steht fest,

es ist nun die Frage, was du danach machen willst,
wenn du

MeinModul modul= irgendwie aus dem vorherigen;
modul.spezielleModulOperation();

ausführen willst, dann steht ja direkt im Quelltext MeinModul,
dann kannst du also auch

MeinModul modul= (MeinModul) o;
modul.spezielleModulOperation();

schreiben, ein ganz normaler Cast,

-----

wenn du aber im Quelltext nicht MeinModul fest drinstehen hast,
dann macht es keinen Sinn irgendwas zu casten!
 

planetenkiller

Aktives Mitglied
ahaaaa, jetzt habe ich verstanden was du meinst. Da hast du recht das geht nicht.

Was ist, wenn ich eine Klasse Modul habe, gibt es eine Möglichkeit wärend der Laufzeit die klasse Modul per extends mit der rückgabe der getModul zu erweitern? Die Klasse java.lang.Class hat eine Methode asSubclass was sich danach anhört was ich will, aber ich verstehe leider nicht wie es geht(wenn überhaubt).
 

Wildcard

Top Contributor
Man kann zur Laufzeit Interfaces implementieren mittels eines Proxy Objekts und einem InvocationHandler, nach dem bisherigen Verlauf dieses Threads zu Urteilen, würde ich dir aber davon abraten dich an so etwas zu wagen.
 
S

SlaterB

Gast
falls alle in Frage kommenden Klassen ein gemeinsames Interface Modul implementieren,
kann man auf dieses Interface casten
 

planetenkiller

Aktives Mitglied
Wenn ich aufs Interface caste, kann ich aber nur funktionen aufrufen, die im Interface definiert sind. Aber leider sind die funktionsnamen in jeder klasse anders. Ich glaube ich muss auf das Dynamische laden von Klassen(Modulen) verzichten und eine andere fest gecodete Lösung suchen.

Das mit dem Casten könnte ich lösen:
Code:
public ??? getModul(String name)
{
     Class cls = Class.forName("paket.modules."+name);
     Object obj = cls.newInstance();

     if(name.equals("Modul1"))
     {
           retrun (Modul1)obj;
     } else if(name.equals("Modul2"))
     {
           return (Modul2)obj;
     }
}
Nur der Return type müsste irgend wie Dynamisch sein, was aber, denke ich, nicht geht. :(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
B objekt einer klasse dynamisch erzeugen Allgemeine Java-Themen 6
B Absolute Paf einer Klasse in dieser dynamisch auslesen? Allgemeine Java-Themen 5
K Klasse dynamisch casten Allgemeine Java-Themen 14
E Klasse dynamisch über main-Methode aufrufen Allgemeine Java-Themen 9
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
kanywayne Java programmieren: Polynom Klasse Allgemeine Java-Themen 4
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S static in Interface und Klasse Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
J Builder Klasse mit Lombok bauen Allgemeine Java-Themen 2
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
X Klassen Klasse BreakIterator Allgemeine Java-Themen 6
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
M Kapselung Modellierung von Intervallen: Klasse Interval Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
ReinerCoder Klasse kann nicht public deklariert werden Allgemeine Java-Themen 2
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
J IndexOutOfBoundsException bei der Nutzung der Klasse Message von mime4j Allgemeine Java-Themen 5
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
K Best Practice Auf die Klasse zugreifen im erzeugten ActionListener Allgemeine Java-Themen 2
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
magdaStone Logikproblem Umschalten von booleans in anderer Klasse Allgemeine Java-Themen 7
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
A Java Klasse auf Tomcat während der Laufzeit austauschen Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
B Animierte Klasse schreiben - Wie? Allgemeine Java-Themen 9
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
so_ein_Komischer Erste Schritte java Math Klasse finden? Allgemeine Java-Themen 2
J beans.instantiate(): Klasse kann nicht instanziiert werden Allgemeine Java-Themen 2
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
F Methodenaufruf mit abgeleiteter Klasse als Arg... Allgemeine Java-Themen 10
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Die Initialisierung von Feldern in ableitender Klasse erzwingen..? Allgemeine Java-Themen 16
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F Enums als innere Klasse sinnvoll? Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben