Я только что получил проект Java5, у которого есть эта ошибка, я пробовал использовать Java5 и Java6, но он все еще там. он работал как-то раньше (поскольку он был в svn), как я могу обойти эту ошибку компилятора?Не может ссылаться на статическое поле перечисления в инициализаторе?
ответ
Не «обходите» ошибку - она не будет делать то, что вы хотите. Ошибка есть по уважительной причине.
Значения перечисления инициализируются перед любыми другими статическими полями. Если вы хотите сделать что-то подобное, добавляя все значения в карту, сделать это в статическом инициализаторе после всего остального:
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 - Вы знаете, почему эта ошибка не встречается в Eclipse 3.3, но в 3,4? – tddmonkey
Есть ли причина в примере выше для использования 'Foo foo: EnumSet.allOf (Foo.class)' вместо 'Foo foo: Foo.values ()'? –
@AbdullahJibaly: Не совсем. Думаю, они здесь почти эквивалентны. –
Другим способом «обойти» это, если вам нужен, например, счетчик или то, что должно работать на каждом инициализационные, чтобы создать частный статический внутренний класс, например, так:
- 1. «неопределенная ссылка» пытается ссылаться на статическое поле
- 2. Статическое сопзЬ без инициализаторе
- 3. Концептуальная причина «поле инициализатора не может ссылаться на не-статическое поле, метод или свойство» CS0236 Ошибки
- 4. Java не статическое поле
- 5. Расширение перечисления в инициализаторе class_eval
- 6. не может статически ссылаться на нестатическое поле
- 7. Почему этот код перечисления является незаконной ссылкой на статическое поле?
- 8. В RecyclerView.Adapter нестатистическое поле не может ссылаться на метод onclick
- 9. не статическое имя переменной не может ссылаться из статического контекста
- 10. поле инициализатор не может ссылаться на нестатическом поле
- 11. Статическое поле не инициализируется
- 12. Статическое поле PHP статическое?
- 13. Wpf: Может ли Trigger.Value ссылаться на статическое свойство?
- 14. нелегальной ссылка на статическое поле от инициализатора
- 15. Readonly поле в объекте инициализаторе
- 16. Как ссылаться на другое значение свойства в инициализаторе члена C#?
- 17. Статическая ссылка на поле не статическое
- 18. Как ссылаться на инициализируемый объект в инициализаторе с помощью C#?
- 19. Как статическое поле readonly может быть нулевым?
- 20. Статическое поле в фрагменте
- 21. Безопасно ли ссылаться на структуру, которая инициализируется в ее инициализаторе?
- 22. Инициализатор поля не может ссылаться на нестатическое поле C#
- 23. «Инициализатор поля не может ссылаться на нестатическое поле, метод
- 24. Инициализатор поля не может ссылаться на нестатическое поле, ASP.NET MVC
- 25. поля инициализатор не может ссылаться на нестатическое поле
- 26. не может ссылаться на dispatch_get_global_queue
- 27. не может ссылаться на cvd.lib
- 28. не может ссылаться на System.Data.Entity.ModelConfiguration
- 29. не может ссылаться на «findObjectsinBackgroundWithBlock
- 30. Статическое поле, которое не разделяет
это может помочь опубликовать свой код, который erroring – tddmonkey
Не могли бы вы предоставить небольшой образец кода, что вы пытаетесь достигать? –
Извините, я нашел его через google, но, похоже, работает, когда частное статическое конечное поле является примитивным типом. У кого-нибудь есть идея, почему? – Norswap