Sto sovrascrivendo un metodo da una libreria Java e il parametro per la funzione è annotato come @NonNull
. Tuttavia, quando viene chiamato il metodo, il parametro viene spesso con un valore null
. Quando sovrascrivo il metodo in Kotlin, mi costringe a rispettare l'annotazione @NonNull
e contrassegnare il parametro come non annullabile. Ovviamente, Kotlin lancia un'eccezione in fase di esecuzione quando il parametro entra in un valore nullo. C'è un modo per sovrascrivere il metodo in Kotlin e ignorare l'annotazione @NonNull
?Come è possibile sovrascrivere un metodo java e modificare il nullability di un parametro?
In particolare, sto utilizzando la libreria appcompat per Android. Il metodo è in AppCompatActivity.java
@CallSuper
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
}
L'override in Kotlin:
override fun onSupportActionModeFinished(mode: ActionMode) {
super.onSupportActionModeFinished(mode)
}
Il motivo è di vitale importanza che si segue il modello non nullo è perché si tratta anche con l'annotazione CallSuper. Se hai passato un valore nullo, non ci sarebbero stati controlli nel metodo super poiché l'annotazione è per garantire che il valore non sia nullo. Quasi sicuramente ti ritroverai con un NPE. Se non si sta chiamando questo metodo esplicitamente al di fuori del framework, non dovrebbe mai venire con un valore nullo, in quanto il framework rispetterà questa annotazione. – zgc7009
La libreria chiama questo metodo e passa un valore nullo, non il mio codice. La libreria sta rompendo la propria annotazione. Quando eseguo l'override in Java e consento al null di passare al metodo super, non si verifica alcuna NPE. – brain
Che diavolo, si, è strano. – zgc7009