Ho appena ottenuto il progetto Java5 che ha questo errore, ho provato ad usare Java5 e Java6, ma è ancora lì. ha funzionato in qualche modo prima (dato che era in svn), come posso ignorare l'errore del compilatore?Impossibile riferirsi al campo enum statico all'interno di un inizializzatore?
risposta
Non "bypassare" l'errore - non farà ciò che desideri. L'errore è lì per una buona ragione.
I valori di enum vengono inizializzati prima di qualsiasi altro campo statico. Se si vuole fare qualcosa di simile l'aggiunta di tutti i valori in una mappa, farlo in un inizializzatore statico dopo tutto il resto:
import java.util.*;
public enum Foo
{
BAR, BAZ;
private static final Map<String, Foo> lowerCaseMap;
static
{
lowerCaseMap = new HashMap<String, Foo>();
for (Foo foo : EnumSet.allOf(Foo.class))
{
// Yes, use some appropriate locale in production code :)
lowerCaseMap.put(foo.name().toLowerCase(), foo);
}
}
}
Jon - sai perché questo errore non si verifica in Eclipse 3.3 ma in 3.4? – tddmonkey
C'è un motivo nell'esempio sopra per usare 'Foo foo: EnumSet.allOf (Foo.class)' invece di 'Foo foo: Foo.values ()'? –
@AbdullahJibaly: Non proprio. Sono praticamente equivalenti qui, penso. –
Un altro modo per "by-pass" che, se avete bisogno per esempio un contatore o qualcosa che deve essere eseguito su ogni inizializzazione del, è quello di creare una classe interna statica privata, in questo modo:
- 1. inizializzatore di campo statico readon vs inizializzazione del costruttore statico
- 2. Impossibile accedere campo non statico
- 3. Un inizializzatore di campo non può fare riferimento il campo non statico, metodo o proprietà
- 4. Clojure: Impossibile trovare campo statico
- 5. non può creare un riferimento statico al campo non statico
- 6. Accesso principali argomenti da un inizializzatore statico
- 7. C'è un costruttore statico o un inizializzatore statico in Python?
- 8. Perché questo codice enum è un riferimento illegale a un campo statico?
- 9. Inizializzatore membro non statico da un altro non statico
- 10. Impossibile accedere al metodo non statico in contesto statico?
- 11. Classe nidificata: impossibile accedere al campo non statico nel contesto statico
- 12. Un inizializzatore di campo non può fare riferimento al campo, metodo o proprietà non statica
- 13. costruttore Perché enum non può accedere campo statico
- 14. Impossibile individuare il campo metamodel statico
- 15. Assegnare al campo finale statico del omonimo
- 16. Contesto statico nella definizione enum
- 17. Get di campo statico
- 18. Tipo inizializzatore (costruttore statico) gestione delle eccezioni
- 19. Inizializzatore statico su una classe interna?
- 20. C# Come accedere al campo statico di una struttura pubblica
- 21. Sta usando un metodo statico vuoto in una classe che ha un inizializzatore statico accettabile/idiomatico?
- 22. JAVA non possono fare un riferimento statico al campo non statico
- 23. Campo statico di DbContext in Global.asax rispetto al campo di istanza di DbContext nella classe controller?
- 24. Creazione di un inizializzatore
- 25. Mock un campo statico privato con JMockit?
- 26. Impossibile trovare un inizializzatore per il tipo Double in Swift
- 27. Errore: "Impossibile creare un riferimento statico al metodo non statico findViewById (int) dal tipo Attività"
- 28. Inizializzazione del campo statico Java
- 29. Campo statico di tipo incompleto - è legale?
- 30. Ricerca su un campo Enum con Riscatto
potrebbe aiutare a pubblicare il tuo codice che erroring – tddmonkey
potrebbe fornire un esempio di codice piccolo di quello che si sta cercando realizzare? –
Scusate per questo, l'ho trovato tramite google, ma sembra funzionare quando il campo finale statico privato è un tipo primitivo. Qualcuno ha un'idea del perché? – Norswap