У компилятора Scala есть -Xcheck-null
, который пытается проверить, есть ли потенциальное разыменование нулевого указателя во время выполнения.
Для меня это нормально, но я получаю слишком много ложных срабатываний, т.е. предположим, что я определяю logger :
private final val LOGGER: Logger = LoggerFactory.getLogger(classOf[GenericRestImpl])
Метод getLogger
никогда не возвращает null
. Как я могу передать эти знания компилятору, чтобы он не жаловался?
[WARNING] TestImpl.scala:31: warning: potential null pointer dereference: LOGGER.debug
[WARNING] LOGGER.debug("Using {} for sort", sortParam)
Когда я создаю новый экземпляр, я могу пометить его чертой NotNull
:
return new Foo() with NotNull.
Это нормально, но что делать с объектами, возвращаемыми другими методами? Особенно, если он исходит из сторонней библиотеки? Мне не нравится идея помечать все мои переменные как необязательные, потому что это добавит слишком много накладных расходов. Кроме того, мне не нравится идея создавать неявные преобразования (потому что для этого потребуется дополнительный класс для каждого класса, который я хочу пометить как NotNull.
Я также проверил вопрос Библиотечная поддержка черты Scala NotNull, но это не помогло чтобы решить мою проблему.