Diese Frage wurde einmal ohne eine befriedigende Antwort neben "warum möchten Sie das tun" um Reserved words as variable or method names. Ich werde es noch einmal stellen und einen Kontext bereitstellen, der erklärt, warum es notwendig ist, und sogar die Richtung zu einer richtigen Lösung.Erstellen Sie dynamische Klassen mit reservierten Wörtern als Variablen
Ich schreibe Code, der Klassen dynamisch erstellt, um dem Schema einer Datenbank zu entsprechen, auf die ich keine Kontrolle habe. In den meisten Fällen funktioniert der Code sauber, aber in etwa 0,1% der Spaltenfälle werden reservierte Wörter in Java als Spaltennamen verwendet. Der folgende Code wird verwendet, um das dynamische Feld in der Klasse zu erstellen:
evalClass.addField (CtField.make ("public" + columnType + "" + columnName + ";" evalClass "));
Nun, mit Java die Sprache, dies führt zu einem Problem, jedoch in JVM-Byte-Code, sollte dies völlig legal sein, so sollte es eine Möglichkeit geben, dieses Feld dynamisch zu erstellen und darauf zugreifen Byte-Code-Operationen verwenden. Hat jemand irgendwelche Beispiele dafür, wie dies auf eine Art und Weise geschehen würde, die beliebige Strings unterstützt, einschließlich Leerzeichen und reservierte Wörter? Vielen Dank!
Diese Frage hat absolut eine befriedigende Antwort: [* "Nein, es gibt keinen Weg."] (Http://Stackoverflow.com/a/424002/157247) Der Unterschied zwischen Ihrer Frage und diesem ist, dass Sie Ich versuche es nicht auf der * Quellcodeebene *. Ich schlage vor, diese Informationen in den Vordergrund zu stellen, und erwähne nur die andere Frage am Ende: "Ich habe das gesehen, aber ich frage nach Quellcode und ich frage, ob wir das auf Bytecode-Ebene tun können, weil wir es nicht können mach es auf Quellcodeebene. " –
Ich verstehe immer noch nicht, warum das notwendig ist. Jede Persistenzarchitektur, die ich mir vorstellen kann, bietet einfache Techniken zum Zuordnen von Feld/Bean-Eigenschaftsnamen zu beliebigen Spaltennamen, und das Vermeiden von Java-Schlüsselwortfeldnamen ist einer der Gründe dafür. Sicher, Sie generieren Klassen aus einem Schema, aber das Konzept ist das gleiche. Warum müssen Ihre Feldnamen mit Spaltennamen übereinstimmen? Warum gehst du nicht gerade z. Fügen Sie allen Ihren Feldnamen (oder nur reservierten Wörtern) ein Präfix oder etwas hinzu? –
Selbst wenn Sie die Klassen generieren könnten, welchen Zweck würden sie erfüllen? Sie konnten diese Felder in keinem von Ihnen geschriebenen Quellcode verwenden. Das Ganze klingt nach einer wirklich guten Möglichkeit, viel Zeit zu verschwenden.Verbringe diese Zeit damit, die von Jason genannten Abbildungen in deine Persistenz-Architektur aufzunehmen (und/oder dich vielleicht selbst zu fragen, warum du deine eigene Persistenz-Architektur schreibst). –