Java Reflectionvon ClassB aus package 'b' nach ClassB in package 'a'

capilano

Lt. Junior Grade
Registriert
Juli 2009
Beiträge
378
Guten Tag zusammen,

ich habe mich bisher unter Java noch nie mit Reflections beschäftigt, daher bin ich etwas unerfahren darin. Ich probiere gerade ein Reflection von einer Klasse in einem Package zu der identischen Klasse in einem anderen Package.

Beispiel:

Code:
package relections.b;

public class ClassB {

    public ClassB() {
        System.out.println("ClassB in Package relections.b");
    }
 
    public void helloWorld() {
        System.out.println("helloWorld ClassB in Package relections.b");
    }
}

Code:
package relections.a;

public class ClassB {

    public ClassB() {
        System.out.println("ClassB in Package relections.a");
    }
 
    public void helloWorld() {
        System.out.println("helloWorld ClassB in Package relections.a");
    }
}

Nun möchte ich gerne, dass aus dem alten Package (hier relections.a) die Klasse im neuen Package (hier relections.b) aufrufen. Ist dies per Reflection möglich? Wenn ja wie?
Bisher habe ich noch kein Beispiel bzw. Lösung für das gefunden.
Ich bedanke mich herzlichst für die Hilfe!

cap.
 
Ich glaube, du hast den Zweck von Reflection nicht verstanden. Das was du hier erreichen willst, erreichst du doch auch mit einem
Code:
new reflections.b.ClassB()
Du gibst also den fully qualified name der Klasse an, weil der einfache Name mehrdeutig ist.

Reflection wirst du vermutlich nicht/nie brauchen. Es hat seine Berechtigung hier und da, z.B. arbeiten Frameworks gern damit. Wann immer ich selbst Reflection gebraucht habe, war es, weil ich die Architektur der vorliegenden Software so kaputt war, dass es nicht anders ging. Man kann damit nämlich z.B. auf private Klassen und Felder zugreifen, was eigentlich nicht geht. Noch viel abgefahrener - man kann damit final fields verändern.

Schildere doch mal, was du eigentlich vorhast.
 
Zuletzt bearbeitet:
Vielen Dank für deine Antwort.

Ich habe z.B. serialisierte Objekte von reflections.a.ClassB gespeichert, verschiebe die Klasse nun aber in ein anderes Package (reflections.b). Nun sollen die alten Objekte trotzdem deralisiert werden können.

Es kann sein, dass Reflection hier nicht notwendig ist. Mir wurde erzählt, dass dies möglich über Reflection möglich ist.
 
Reflections können auch für das dynamische Einlesen von Klassen sinnvoll sein wobei das noch mal eine ganz andere Dimension des Aufwand ist. Ansonsten stimme ich Tumbleweed zu.
Bitte erörtere dein Ziel

€dit: da mittlerweile ein neuer post gekommen ist:
Kannst du nicht beide Klassen von dem gleichen Interface ableiten? Damit wäre das gesamte Problem nicht da.
Allgemein ist solches Refactoring nicht wirklich zu empfehlen, man sollte ja auch nicht eine ältere Version der Klasse "über" eine neue deserialisieren (dafür gibt es die serialized version id).
 
Zuletzt bearbeitet:
Die Klasse ist im den selbtgestellen Szenario nur verschoben (kein Interface vorhanden) und ist ansonsten inhaltlich komplett identisch. Daher war meine Idee eine "Dummy"-Klasse zu erstellen, am vorherigen Ort und dann von dort per Reflection auf den neuen zu verweisen um "alte" Objekte weiterhin verwenden zu können.
 
Man könnte dafür eine neue "dummy" Klasse von der neuen erstellen und dann per reflection manuell jedes Feld rüber kopieren.

Ich würde aber sagen i.A. ist dieser Ansatz dumm und man sollte lieber einen Konstruktor der ein Objekt der anderen Klasse nimmt hinzufügen oder ein Interface nutzen.
 
Zurück
Oben