Der beste Weg, um "erweiterbare Enums" in Annotationen zu unterstützen?

8

In meiner Bibliothek gibt es ein Konzept von "Benutzerebenen". Ich habe mehrere Standardstufen zur Verfügung gestellt, möchte aber aus verschiedenen Gründen dem Benutzer die Möglichkeit geben, eigene Ebenen zu verwenden.

Derzeit ist dies als

implementiert %Vor%

Das Problem besteht darin, dass der Benutzer normalerweise die erforderliche Benutzerebene in einer Anmerkung übergeben wird. Dinge, die ich versucht und gescheitert habe:

  • Verwenden von AdminLevel als Typ - schlägt mit "ungültiger Typ für Anmerkungselement" fehl
  • String als Typ verwenden, aber den Wert mit StandardAdminLevels.ADMIN.name() setzen - Fail mit "Attributwert muss konstant sein"
  • Erstellen von StandardAdminLevels als letzte Klasse, die nichts mit öffentlichen statischen Endfeldern für jede der Ebenen implementiert (im Wesentlichen eine Enumeration) - schlägt fehl mit "ungültiger Typ für Annotationselement"

Gibt es einen anderen Weg, auf dem ich nicht erweiterbare Enums in Anmerkungen sehen kann? Ich versuche, wegen ihrer Klarheit und dem grundsätzlichen Schutz vor ungültigen Werten bei enums zu bleiben, aber die einzige andere Art, an die ich denken kann, ist String constants. Das Problem, das ich habe, ist, dass Verifikation an jedem einzelnen Punkt erfordert Benutzer Ebenen verwendet werden, möglicherweise sogar in Client-Code

Irgendwelche Ideen?

    
TheLQ 06.06.2013, 01:06
quelle

1 Antwort

7

Eine Idee: Jeder mögliche AdminLevel ist eine eigene Klasse. Übergeben Sie die Class dieser Klasse an die Annotation.

%Vor%     
Sebastian Redl 13.06.2013, 19:06
quelle

Tags und Links