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
trait:
return new Foo() with NotNull.
Это нормально, но что делать с объектами, возвращаемыми из других методов? Особенно, если он идет от сторонней библиотеки? Мне не нравится идея отмечать все мои переменные как Необязательные, потому что это добавит слишком много накладных расходов. Кроме того, мне не нравится идея создания неявных преобразований (потому что для этого класса потребуется дополнительный класс, который я хочу отметить как NotNull.
Я также проверил вопрос Поддержка библиотеки для Scala NotNull trait, но это не помогло решить мою проблему.