Nella mia biblioteca c'è un concetto di "livelli utente". Ho fornito diversi livelli predefiniti ma per vari motivi voglio dare all'utente la possibilità di utilizzare i propri livelli.Il modo migliore per supportare "enumerazioni estendibili" nelle annotazioni?
momento questa viene effettuata nel modo
public interface AdminLevel {
public void name();
}
public enum StandardAdminLevels implements AdminLevel {
ADMIN,
ANONYMOUS
}
Il problema è che l'utente sta andando solitamente essere passando loro livello utente desiderato in un'annotazione. Le cose che mi hanno provato e fallito:
- Utilizzando AdminLevel come tipo - l'errore "tipo non valido per il membro annotazione"
- Utilizzando String come tipo, ma impostando il valore con
StandardAdminLevels.ADMIN.name()
- fallisce con "valore di attributo deve essere costante" - Fare StandardAdminLevels una classe finale che non implementa nulla con public static finale campo di per ciascuno dei livelli (essenzialmente un enum) - l'errore 'tipo non valido per il membro annotazione'
c'è qualche altro modo che posso pensare di avere enumerazioni estendibili nelle annotazioni? Sto cercando di restare con le enumerazioni a causa della loro chiarezza e protezione di base contro i valori non validi, ma l'unico altro modo in cui posso pensare sono le costanti String. Il problema che ho è che richiederebbe la verifica ad ogni singolo punto, i livelli utente sono usati, potenzialmente anche nel codice cliente
Qualche idea?
Un enum estendibile è una contraddizione in termini. L'intero scopo dell'enumerazione è definire l'intero set e consentire solo quelli. – Aurand
@Aurand Come sono meglio le stringhe magiche o le magie? Le enumerazioni sono ancora utili qui per la convalida dei valori – TheLQ
Cosa c'è di sbagliato nell'avere un enum con tutti i valori possibili? –