Ich habe eine benutzerdefinierte Annotation, die ich implementiert habe, und ich möchte einen Annotationsprozessor verwenden, um eine Liste aller Klassen in meiner App zu generieren, die sie verwenden diese bestimmte Anmerkung.Verwenden eines Annotation Processors zum Erstellen einer Liste von Klassen mit einer bestimmten Annotation
Ich habe this tutorial gefunden, die beschreibt, wie man eine Klassendatei mit einem Annotationsprozessor erzeugt, so dass es ziemlich einfach sein sollte, eine Klasse für jede Klasse mit meiner Annotation zu generieren.
Was ich nicht herausfinden kann ist, wie ich all diese Informationen in einer einzigen Klasse sammeln kann. Es scheint keine Möglichkeit zu geben, eine Klasse zu ändern, daher kann ich keine neuen Elemente an die Liste anhängen, wenn die Klasse das erste Mal generiert wurde.
Gibt es eine Möglichkeit, einen Annotationsprozessor zu verwenden, um eine Methode zu generieren, die die Liste aller Klassen in einer App zurückgibt, die mit einer bestimmten Annotation versehen sind?
Hey John! Schön von Ihnen zu hören :) Silver sieht ziemlich gut aus, was ist der Laufzeiteinfluss von SilverUtils.getAnnotated()? Außerdem, was, wenn überhaupt, muss es zur Laufzeit außerhalb der Klassen, die mit Anmerkungen versehen sind, in den Klassenlader hineingezogen werden? – emmby
Gut von dir auch Mike zu hören! Das Coolste an diesem Ansatz ist, dass die Laufzeit so schnell wie möglich ist. Sobald Sie eine Instanz von Example haben, besteht die einzige Laufzeitkosten darin, eine statische Variable zurückzugeben. SiverUtil.get() führt eine kleine Reflektion von Lookup-Klassen durch (ein Aufruf von Class.forName()), aber dieser Aufruf wird zwischengespeichert und daher nur einmal ausgeführt. SilverUtil ist eigentlich nur für die Bequemlichkeit da, technisch müssen Sie es nicht verwenden, um den generierten Code zu verwenden. –