Reflection



  • Hallo,

    fuer was braucht man denn nochmal Reflection. Es bedeutet wohl dass man sich waehrend der Laufzeit eine Klasse oder ein Objekt anschauen kann. Aber das kann man doch immer. Ich hab doch immer Zugriff auf das Objekt auch waehrend der Laufzeit. Wann brauch ich also Reflections ?


  • Mod

    Es geht nicht um Daten, sondern um Code.



  • Vielleicht hilft dir dieses Tutorial von Oracle.

    Hat ein paar Beispiele mit Erklaerungen.



  • schoen und gut. Aber welcher Use Case erfordert es z.B. den Klassennamen eines Objekts oder den Wert eines Feldes abzufragen. Das letztere kann ich ja auch ganz normal ueber das Objekt machen. Hier mal ein Code.

    Test myObject = new Test();
    Class<? extends Test> c = myObject.getClass();
    System.out.println(c.getName());
    
    Field field = myObject.getClass().getDeclaredField("number");    
    field.setAccessible(true);
    Object value = field.get(myObject);
    


  • SeppJ schrieb:

    Es geht nicht um Daten, sondern um Code.

    nope,alter. der quelltext spielt bei reflection keine rolle mehr.

    reflection ist halt die möglichkeit,das compilat zur laufzeit analysieren und/oder manipulieren zu können.



  • Fuer was braucht man Reflection. Warum soll ich wissen muessen, ob eine Methode public oder private ist. Das seh ich doch wenn ich in den Code gucke. Ich mein schoen und gut dass ich das auch per Code machen kann, aber was bringt mir das...

    Reflection = Code Analyse !

    Also mit Reflection kann man wohl so gar den Code manipulieren. Ist ein STring eigentlich private, kann man ihn mit Reflection public machen. Gut. Aber wieso sollte man das wollen. Wenn ich was programmier sollte ich schon wissen ob ein Member public oder private sein soll.

    Wenn man google findet man beispiele wie:
    (1) Jemand schreibt ein framework und kennt die Klassen der Nutzer nicht
    (2) Fuer ein Testframework, das die Methoden rausliest.

    Statt Reflection soll es eher Class inspector heissen...



  • computernerds schrieb:

    ...

    Reflection is the Java way of 'trust the programmer'

    Java ist sonst ultrageil in typsicherheit u.ä. aber wenn du das mal durchbrechen musst, dann gibt dir auch java ein mächtiges werkzeug in die hand.


  • Mod

    Ich habe mir vor langer Zeit mal mit Reflection ein Plugin-System für ein Programm gebaut. Die Plugins waren dann einfach Class-Files, die an irgendeinem Ort lagen und bestimmte Interfaces implementiert haben. Mit Reflection habe ich dann geguckt, was ich da so vorliegen habe.

    Die Plugins waren bei mir im Prinzip Algorithmen, die ich in einem kleinen Bildverarbeitungsprogramm testen wollte. Ich hatte aber in einem ersten Anlauf festgestellt, dass ich sehr viel Zeit in die Programmierung der grafischen Benutzungsschnittstelle gesteckt hatte. Deswegen bin ich da dann auch noch etwas weiter gegangen. Ich habe Annotations genutzt, um im Code unter anderem anzugeben, welche Wertebereiche bestimmte Parameter haben dürfen. Mittels Reflection habe ich mir dann daraus zur Laufzeit eine Art Standard-GUI erstellt ohne konkreten GUI Code für das jeweilige Plugin zu haben, sondern eben Code, der eine generelle GUI erstellt.

    Das war damals ein sehr experimentelles Programm für mich und sicherlich ist es nicht der übliche Usecase für Reflection. Ich weiß auch nicht, ob es den überhaupt gibt. Aber mit genügend Phantasie kann man damit schon ne Menge lustiges Zeug machen.



  • Reflection wird vorallem bei Sachen wie Dependency Injection (Spring z.B.) und ähnlichem benutzt.
    Hibernate dürfte auch viel Reflection benutzen.

    Beans in JavaFX bzw Properties und Dinge die sich automatisch darauf beziehen können, dürften auch mittels Reflection nach bestimmten Patterns für Methoden suchen


Anmelden zum Antworten