Ich überschreibe eine Methode aus einer Java-Bibliothek, und der Parameter für die Funktion ist mit @NonNull
annotiert. Wenn die Methode aufgerufen wird, kommt der Parameter jedoch häufig mit einem null
Wert. Wenn ich die Methode in Kotlin überschreibe, zwingt es mich, die Annotation @NonNull
zu respektieren und den Parameter als nicht nullbar zu markieren. Natürlich löst Kotlin zur Laufzeit eine Ausnahme aus, wenn der Parameter mit einem Nullwert kommt. Gibt es eine Möglichkeit, wie ich die Methode in Kotlin überschreiben und die @NonNull
Annotation ignorieren kann?Wie kann ich eine Java-Methode überschreiben und die Nullbarkeit eines Parameters ändern?
Insbesondere verwende ich die appcompat-Bibliothek für Android. Das Verfahren ist in AppCompatActivity.java
@CallSuper
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
}
Die Überschreibung in Kotlin:
override fun onSupportActionModeFinished(mode: ActionMode) {
super.onSupportActionModeFinished(mode)
}
Der Grund ist es wichtig, dass Sie die ungleich NULL Muster folgen, weil es auch mit der CallSuper Anmerkung kommt. Wenn Sie einen Nullwert übergeben, gibt es keine Überprüfungen in der Supermethode, da die Annotation sicherstellen soll, dass der Wert nicht null ist. Sie werden fast sicher mit einer NPE enden. Wenn Sie diese Methode nicht explizit außerhalb des Frameworks aufrufen, sollte sie niemals einen Nullwert enthalten, da das Framework diese Annotation berücksichtigt. – zgc7009
Die Bibliothek ruft diese Methode auf und übergibt einen Nullwert, nicht meinen Code. Die Bibliothek bricht ihre eigene Anmerkung. Wenn ich in Java überschreibe und erlaube, dass die Null zur Super-Methode geht, tritt keine NPE auf. – brain
Was in der Welt, ja, das ist nur komisch. – zgc7009