Есть ли способ создать перечисление, которое не может быть нулевым? - PullRequest
1 голос
/ 11 октября 2011

Я обнаружил несколько ошибок в моем проекте из-за того, что перечисления были нулевыми, а не одно из перечисленных значений.Есть ли способ гарантировать, что переменная этого типа всегда будет инициализироваться одним из перечисленных значений и никогда не будет нулевой?

Ответы [ 2 ]

4 голосов
/ 11 октября 2011

Нет. Перечисления всегда являются ссылочными типами, и null является допустимым значением для любого ссылочного типа. Вы можете всегда написать:

MyEnum x = null;

и если у вас есть экземпляр или статическая переменная, которая не инициализирована явно, она всегда будет по умолчанию равна нулю.

1 голос
/ 11 октября 2011

Вероятно, это можно сделать (очень, очень болезненно), выбрав систему Java Design By Contract и изменив каждую функцию, которая принимает перечисление, чтобы оно не было нулевым. Это, конечно, гигантский объем работы над существующим проектом.

С практической точки зрения, вы можете рассмотреть возможность интеграции инструмента статического анализа кода в ваш процесс сборки. Это также большой объем работы (он потенциально может найти гигантский набор «ошибок»), но, вероятно, выполнимо (все еще мучительно), если у вас есть время, чтобы в него инвестировать. Правильный инструмент статического анализа кода может обнаружить такой тип ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...