У разных групп разные стандарты.
Во-первых, я предполагаю, что вы знаете разницу между RuntimeException
с (не проверено) и обычным Exception
с (проверено), если нет, то смотрите этот вопрос и ответы . Если вы напишите свое собственное исключение, вы можете заставить его перехватиться, тогда как NullPointerException
и IllegalArgumentException
являются исключениями RuntimeExceptions, которые в некоторых кругах вызывают недовольство.
Во-вторых, как и у вас, группы, с которыми я работал, но не активно используют утверждения, но если ваша команда (или пользователь API) решила, что будет использовать утверждения, тогда утверждение звучит как правильный механизм.
На вашем месте я бы использовал NullPointerException
. Причина этого - прецедент. Возьмите пример Java API от Sun, например java.util.TreeSet . Это использует NPE именно для такой ситуации, и, хотя он выглядит так, как будто ваш код только что использовал нуль, это вполне уместно.
Как уже говорили другие, IllegalArgumentException
- вариант, но я думаю, что NullPointerException более коммуникативен.
Если этот API предназначен для использования сторонними компаниями / командами, я бы придерживался NullPointerException
, но убедитесь, что он объявлен в javadoc. Если это для внутреннего использования, то вы можете решить, что стоит добавить собственную иерархию исключений, но лично я нахожу, что API, которые добавляют огромные иерархии исключений, которые будут только printStackTrace()
d или зарегистрированы, являются просто пустой тратой усилий.
В конце концов, главное, чтобы ваш код четко взаимодействовал. Локальная иерархия исключений похожа на местный жаргон - она добавляет информацию для инсайдеров, но может сбивать с толку посторонних.
Что касается проверки на нуль, я бы сказал, что это имеет смысл. Во-первых, он позволяет вам добавить сообщение о том, что было пустым (то есть узел или токены), когда вы создаете исключение, которое будет полезно. Во-вторых, в будущем вы можете использовать реализацию Map
, которая позволяет null
, и тогда вы потеряете проверку ошибок. Стоимость почти ничего, поэтому, если профилировщик не скажет, что это проблема внутреннего цикла, я бы об этом не беспокоился.