Nadpisuję metodę z biblioteki Java, a parametr tej funkcji został opisany jako @NonNull
. Jednak, gdy wywoływana jest metoda, parametr często pojawia się z wartością null
. Kiedy nadpisuję metodę w Kotlin, zmusza mnie to do przestrzegania adnotacji @NonNull
i oznaczenia parametru jako nieoparty. Oczywiście, Kotlin zgłasza wyjątek w czasie wykonywania, gdy parametr przyjdzie z wartością pustą. Czy jest jakiś sposób, aby zastąpić metodę w Kotlin i zignorować adnotację @NonNull
?Jak mogę przesłonić metodę java i zmienić wartość pustą parametru?
W szczególności używam biblioteki appcompat na Androida. Metoda ta jest w AppCompatActivity.java
@CallSuper
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
}
Korekcja w Kotlin:
override fun onSupportActionModeFinished(mode: ActionMode) {
super.onSupportActionModeFinished(mode)
}
Powodem jest to ważne, aby postępować zgodnie z niepustych wzór, ponieważ jest również pochodzi z dopiskiem CallSuper. Jeśli przekazałeś wartość pustą, nie będzie żadnych sprawdzeń w metodzie super, ponieważ adnotacja ma zapewnić, że wartość nie jest pusta. Prawie na pewno skończy się NPE. Jeśli nie wywołujesz tej metody jawnie poza ramką, nigdy nie powinna ona mieć wartości null, ponieważ struktura będzie respektować tę adnotację. – zgc7009
Biblioteka wywołuje tę metodę i przekazuje wartość pustą, a nie mój kod. Biblioteka zrywa z własną adnotacją. Kiedy przesłonię w Javie i zezwolę zeru na przejście do super metody, nie pojawia się NPE. – brain
Co na świecie, to po prostu dziwne. – zgc7009