Il compilatore Scala ha -Xcheck-null
che tenta di verificare se ci sono potenziali dereferenze del puntatore nullo in runtime.Chiamata al metodo Mark che restituisce sempre risultato non nullo
E 'ok per me, ma ho troppo falsi positivi, vale a dire supponiamo che io definisco logger:
private final val LOGGER: Logger = LoggerFactory.getLogger(classOf[GenericRestImpl])
Il metodo getLogger
mai restituisce null
. Come posso passare questa conoscenza al compilatore in modo che non si possa lamentare?
[WARNING] TestImpl.scala:31: warning: potential null pointer dereference: LOGGER.debug
[WARNING] LOGGER.debug("Using {} for sort", sortParam)
Quando creo nuova istanza posso segnare con NotNull
tratto:
return new Foo() with NotNull.
Questo va bene, ma che cosa fare con gli oggetti restituiti da altri metodi? Soprattutto se proviene da una libreria di terze parti? Non mi piace l'idea di contrassegnare tutte le mie variabili come Facoltativo, perché aggiungerà troppi sovraccarichi. Inoltre, non mi piace l'idea di creare conversioni implicite (perché richiede una classe extra per ogni classe che voglio contrassegnare come NotNull.
Ho anche controllato la domanda Library support for Scala's NotNull trait ma non ha aiutato a risolvere il mio problema.
Capisci bene, il tratto NotNull è solo un indicatore. Non fa niente di più. – Jatin