Reflection mit Klasse und Subklasse

J90

Aktives Mitglied
Hallo,
mein Problem schildere ich in einer UML-Grafik, da ich in meinem letzten Post feststellen musste,
dass alles andere nur umständlich und schlecht verständlich ist.
Ich hoffe das Hochladen funktioniert direkt.

Anmerkung zu meinem Problem:
Die Send Methode der Handler Klasse wird für historische Auswertungen benutzt, dagegen
soll die Send Methode der Handler_Extension Klasse für Liveausführungen (Verbindung mit Web)
genutzt werden; aufgrund dessen soll ein Problemloses umswitchen möglich sein,
ohne den Code der Klasse für Introspection zu verändern.
Was wäre die sauberste Veränderung bzw. Lösung?

Beste Grüße
 

Anhänge

  • Problem.jpg
    Problem.jpg
    74,2 KB · Aufrufe: 55

mrBrown

Super-Moderator
Mitarbeiter
Die sauberste Lösung?
Auf Vererbung und Reflection verzichten.


Allerdings wären ein paar mehr Infos sicher nützlich...
Ich seh da aktuell kein Problem (also außer Reflection und Vererbung und einer ziemlich merkwürdigen Architektur...), warum sollte man nicht einfach HandlerExtension statt Handler übergeben, das sollte dann doch genauso funktionieren...
 
Zuletzt bearbeitet:

stg

Top Contributor
"aber es kommt keine Send Methode an, da die Referenz nicht stimmig ist".
Kannst du das übersetzen? Was meinst du damit?

Der Handler wird an Introspection übergeben, ist aber selbst derjenige, der Introspection aufruft um dann Code auf sich selbst ausführen zu lassen? Seh ich das richtig? o_O
 

J90

Aktives Mitglied
Auf Reflection kann in keinster Weise verzichtet werden, da die Klassen(Sind sehr viele Klassen), die über die
Reflection API ausgeführt werden sich in einem eigenen Projekt befinden und genau nur zu diesem Zweck dienen;

Ich werde mal abwarten bis heute Abend, ob sich noch Lösungen ergeben
 

mrBrown

Super-Moderator
Mitarbeiter
Auf Reflection kann in keinster Weise verzichtet werden, da die Klassen(Sind sehr viele Klassen), die über die
Reflection API ausgeführt werden sich in einem eigenen Projekt befinden und genau nur zu diesem Zweck dienen;
Und *warum* muss das so? In dem UML-Diagramm ist da absolut kein Grund für erkennbar, und in deiner Begründung genausowenig. Macht halt mehr Probleme, als es löst...

Ich werde mal abwarten bis heute Abend, ob sich noch Lösungen ergeben

Nicht, wenn nicht mehr Infos kommen. Bisher ist da nicht mal ersichtlich, *was* das Problem ist.
 

JStein52

Top Contributor
.... sich in einem eigenen Projekt befinden und genau nur zu diesem Zweck dienen;
Was willst du uns damit sagen ? Völlig unverständlich was das mit Reflection zu tun hat.
Und in deinem UML-Diagramm schreibst du der Programmablauf funktioniert aber es kommt keine Send-Methode an. Was funktioniert denn ? Wer ruft wen auf und was passiert letztendlich ? Fliegt eine Exception ?
 

dzim

Top Contributor
Ich habe neulich einen Chef erklären müssen, wo Reflection sinnvoll ist und wo nicht:
Kurze Version: außer APIs, die annotations etc. behandeln (spring, Guice, ...), gibt es nur selten einen guten Grund es verwenden zu müssen.

Ich habe mir neulich fast einen abgebrochen, mit eine eigene kleine Bibliothek für das Übertragen von Modelldaten zu schreiben (orm <-> dto) und habe mich damit am Rand meiner eigenen Grauzone bewegt
 

JStein52

Top Contributor
Das Reflection-API dient dazu, die Bestandteile von Klassen (Datenelemente, Konstruktoren und Methoden) dynamisch zur Laufzeit zu analysieren und zu benutzen. Es gestattet somit, in einem Java-Programm Klassen und Interfaces zu benutzen, die zum Zeitpunkt des Kompilierens noch nicht bekannt sind. Das Reflection-API wird unter anderem in folgenden Fällen eingesetzt:
  • Das dynamische Laden von Klassen in eine Anwendung und die Erzeugung von zugehörigen Exemplaren. Ein häufiger Anwendungsfall hierfür ist das dynamische Einbinden von Klassen, die eine Art Treiberfunktion haben. Der Name der Treiberklasse wird dabei oft in einer Konfigurationsdatei angegeben und beim Start der Applikation ausgelesen. Anschließend kann mit einem Konstruktoraufruf über das Reflection-API ein Exemplar der Treiberklasse erzeugt werden.

    Solange man nur parameterlose Konstruktoren aufrufen will, kann man hier wie im Beispiel für die Methode Class.newInstance() im Abschnit xxx verfahren. Sobald aber Parameter übergeben werden sollen, muss auf das Reflection-API zurückgegriffen werden.

  • Auch bei Java-Beans kommt das Reflection-API zum Einsatz, um die Datenelemente der Bean-Klassen (in diesem Kontext meist Properties genannt) zu ermitteln und deren Werte auszulesen bzw. neu zu setzen. Diese Properties sind zwar spezifisch für alle Bean-Klassen, jedoch folgen die Bean-Properties einem Muster: Zum Einstellen einer Property gibt es eine setXXX()-Methode und zum Auslesen eine eine getXXX-Methode, wobei XXX für den Namen der Property steht. Anhand dieses Musters kann eine Anwendung die Properties einer Bean-Klasse erkennen, indem sie nach diesen setXXX()- und getXXX-Methoden sucht.
Allgemeiner kann man sagen, dass der Einsatz des Reflection-API immer dann erforderlich ist, wenn zur Laufzeit Klassen eingebunden werden sollen,
  • die zum Compile-Zeitpunkt noch nicht bekannt sind
  • oder deren Schnittstellen nicht durch Interfaces oder abstrakte Klassen definiert sind, sondern nur Schnittstellenkonventionen und -mustern folgen.
Für den dynamischen Zugriff auf die Klassenbestandteile definiert das Reflection-API die Klassen ConstructorMethodFieldgetConstructor(), getMethod() und getField() der Klasse Class. Es muss also zunächst immer das Class-Objekt für die Klasse ermittelt werden, auf deren Bestandteile dynamisch zugegriffen werden soll. Auch wenn das Reflection-API ein großes Maß an Flexibilität mit sich bringt, sollte man sie nur dort einsetzen, wo es wirklich erforderlich ist. Denn dadurch bedingt, dass das Erzeugen von Exemplaren und die Aufrufe von Methoden völlig dynamisch erfolgen, kann der Compiler keine der sonst üblichen Prüfungen auf korrekte Datentypen durchführen. Das gleiche gilt auch für Checks, ob geprüfte Exceptions korrekt behandelt werden. Daher sollte man stets bestrebt sein, den Einsatz des Reflection-API auf das notwendige Maß zu beschränken, damit bereits der Compiler die Typsicherheit und die ordnungsgemäße Handhabung von Exceptions gewährleisten kann.
 

dzim

Top Contributor
Was der Text offen lässt, sind die Gefahren, die von unbedachter Nutzung von Reflection ausgeht.
Welche Apache-Bibliothek war es noch? Jedenfalls war dort ein Zusammenspiel von (De-) Serializing und Reflection für ein potentielles Security-Desaster verantwortlich.
Ich glaube ursprünglich war die API auch nur dafür da, Debugging zu ermöglichen, ist aber etwas über sich hinaus gewachsen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B Reflection gone wrong? Allgemeine Java-Themen 21
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Reflection - Abprüfen von Klasseneigenschaften Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
J Reflection-Method Hook? Allgemeine Java-Themen 14
X public Getter ersetzen (Reflection?!) Allgemeine Java-Themen 3
A Reflection Problem Allgemeine Java-Themen 15
K Generic class und Reflection Allgemeine Java-Themen 2
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
E Reflection? Frage Allgemeine Java-Themen 4
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
T Reflection Allgemeine Java-Themen 11
G Klassen Cast auf Argumentenklasse via Reflection? Allgemeine Java-Themen 10
H Collections Generics und Reflection Allgemeine Java-Themen 6
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
P Reflection "Cast" Allgemeine Java-Themen 5
D Reflection-Performance Allgemeine Java-Themen 7
S Reflection und Generic Allgemeine Java-Themen 9
W Reflection -> getMethod bei optionalen Parametern Allgemeine Java-Themen 4
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
M Probleme mit Reflection Allgemeine Java-Themen 10
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
G Java Reflection Allgemeine Java-Themen 11
N Reflection: NoSuchMethodException obwohl Methode existiert Allgemeine Java-Themen 2
brunothg Problem mit Reflection Allgemeine Java-Themen 6
M reflection in inner classes Allgemeine Java-Themen 7
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
Y Reflection und "extends" Schlüsselwort Allgemeine Java-Themen 3
R Reflection Problem Allgemeine Java-Themen 4
N getName() of reflection Object Allgemeine Java-Themen 4
M Reflection Queue auslesen Allgemeine Java-Themen 6
N generic reflection Allgemeine Java-Themen 5
megachucky Java Reflection -> versteckte Felder finden? Allgemeine Java-Themen 3
MQue Reflection Exception Allgemeine Java-Themen 11
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
R Reflection: Membervariablen-Initialwerte Allgemeine Java-Themen 4
G Reflection Allgemeine Java-Themen 6
V reflection in java 5 und 6 Allgemeine Java-Themen 2
C Reflection Übergabeparamter überprüfen? Allgemeine Java-Themen 3
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
G [Reflection + WebService] Methodenaufruf an einem Proxy Allgemeine Java-Themen 11
T Parameternamen mit Reflection-API Allgemeine Java-Themen 14
M reflection mit parametern Allgemeine Java-Themen 8
M Reflection Frage Allgemeine Java-Themen 7
G Code vereinfachen bei Reflection Allgemeine Java-Themen 4
I reflection get inner static classes Allgemeine Java-Themen 2
C Reflection Allgemeine Java-Themen 12
Y Reflection - wie kann ich eine Methode benutzen Allgemeine Java-Themen 4
Y Reflection - wie anwenden/benutzen bei folgendem Problem Allgemeine Java-Themen 3
P Java Reflection API - ResultDataModel ? Allgemeine Java-Themen 3
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
G Reflection: aktuelle bzw umschliessende Methode? Allgemeine Java-Themen 7
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
C Reflection Problem! Allgemeine Java-Themen 2
G Object cast via Reflection Allgemeine Java-Themen 8
T Reflection und Typsicherheit Allgemeine Java-Themen 5
Q Umgang mit Reflection Allgemeine Java-Themen 4
S reflection Allgemeine Java-Themen 12
X Reflection performant? Allgemeine Java-Themen 11
M Reflection und Serializable Allgemeine Java-Themen 5
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
the[V]oid Primitive Arrays per Reflection erzeugen? Allgemeine Java-Themen 2
W Package via Reflection parsen Allgemeine Java-Themen 4
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
M reflection Integer != int ? Allgemeine Java-Themen 3
M reflection invoce Allgemeine Java-Themen 3
K Reflection:Zugriff auf innere Klassen Allgemeine Java-Themen 4
N NoSuchMethodException bei Reflection-Versuch, aber warum? Allgemeine Java-Themen 3
byte Methodenaufruf per Reflection? Allgemeine Java-Themen 2
M Generics und Reflection Allgemeine Java-Themen 3
M Array per Reflection manipulieren Allgemeine Java-Themen 5
M Klassen von ausserhalb des Jars per Reflection nachladen Allgemeine Java-Themen 2
thE_29 Reflection Allgemeine Java-Themen 6
M statische Methode per reflection aufrufen Allgemeine Java-Themen 2
B Frage zu Reflection Allgemeine Java-Themen 3
V Reflection - Problem Allgemeine Java-Themen 3
clemson Reflection Interface Allgemeine Java-Themen 4
N Reflection: An Package einer .class-Datei kommen Allgemeine Java-Themen 2
B Reflection Allgemeine Java-Themen 10
C Reflection und variable casten ! Allgemeine Java-Themen 10
C Reflection - Kurze Beschreibung? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben