Soweit ich wissen und verstehen,Statische Sprachen und Reflexion
Reflection ist die Fähigkeit, Quellcode zur Laufzeit erstellen/ändern.
Aus Wikipedia:
- Entdecken und ändern Konstruktionen Quellcode (wie Codeblocks, Klassen, Methoden, Protokolle, etc.) als First-Class-Objekt bei Laufzeit.
- Konvertieren Sie eine Zeichenfolge, die dem symbolischen Namen einer Klasse oder Funktion entspricht, in eine Referenz auf oder den Aufruf dieser Klasse oder Funktion.
- Bewerten Sie eine Zeichenfolge, als wäre es eine Quellcodeanweisung zur Laufzeit.
Erstellen Sie einen neuen Interpreter für den Bytecode der Sprache, um einen neuen
Sinn oder Zweck für ein Programmierkonstrukt zu geben.
Dynamische Sprachen sind Sprachen, die wir (auswerten direkt von string) zur Laufzeit eval kann.
Aus Wikipedia: „Erweiterung des Programms durch neuen Code hinzufügen, die von Objekten und Definitionen erstreckt, oder durch die Art System zu modifizieren“
Ok, jetzt, meine Frage ist: Wie statische Sprache ד (ohne Eval Fähigkeit) kann Reflexion (zB Java) haben? (der neue Quellcode wird nicht ausgewertet?: /)
Vielen Dank im Voraus!
Java verfügt über eine Bytecode-Manipulationsbibliothek namens [ASM] (http://asm.ow2.org/).Reflection wird nicht verwendet, um neuen Code hinzuzufügen, den Sie in Ihrer Frage beschreiben. –
Reflection ermöglicht das Manipulieren (ja, es kann in einigen Fällen schädlich sein) mit einer Klasse, indem es nach seinen Methoden, Feldern, Zugriffsebenen und dergleichen fragt, aber _nicht einen neuen Code_ erzeugt. Es hat andere Verwendungen, wie zum Beispiel das Aufrufen einer in einer bestimmten Klasse definierten Methode, die nur auf Daten darüber basiert (* Metadaten *). Sie erhalten eine Instanz von einer Klasse, Sie erhalten eine Methode basierend auf ihrer Firma und dann rufen Sie sie auf. – Gamb
@Gambus 10x, aber wenn du einen Quellcode änderst, also du einen Quellcode erzeugst (wie Wikipedia sagt), nicht wahr? – gran33