Kompilator Scala ma -Xcheck-null
, który próbuje sprawdzić, czy istnieje potencjalny dereferencja wskaźnika zerowego w środowisku wykonawczym.Wywołanie metody Mark, która zawsze zwraca wynik niepusty null
To dla mnie ok, ale mam zbyt wiele fałszywych alarmów, czyli załóżmy zdefiniować Rejestrator:
private final val LOGGER: Logger = LoggerFactory.getLogger(classOf[GenericRestImpl])
metody getLogger
nigdy nie powraca null
. Jak mogę przekazać tę wiedzę do kompilatora, aby nie narzekać?
[WARNING] TestImpl.scala:31: warning: potential null pointer dereference: LOGGER.debug
[WARNING] LOGGER.debug("Using {} for sort", sortParam)
Kiedy tworzę nową instancję mogę oznaczyć je NotNull
cechy:
return new Foo() with NotNull.
to jest OK, ale co zrobić z obiektami wrócił z innymi metodami? Zwłaszcza jeśli pochodzi z biblioteki innej firmy? Nie podoba mi się pomysł, aby oznaczyć wszystkie moje zmienne jako opcjonalne, ponieważ zwiększy to obciążenie. Również nie lubię pomysł, aby utworzyć niejawne konwersje (bo będzie to wymagało dodatkowej klasy dla każdej klasy, że chcesz oznaczyć jako NotNull.
Ja również sprawdzone pytanie Library support for Scala's NotNull trait ale to nie pomogło rozwiązać mój problem.
Dobrze rozumiesz, cecha NotNull jest tylko znacznikiem. Nie robi nic więcej. – Jatin