bra*_*ain 7 java android nullable kotlin
我正在重写Java库中的方法,并将该函数的参数注释为@NonNull.但是,调用该方法时,参数通常会带有一个null值.当我在Kotlin中覆盖该方法时,它会强制我尊重@NonNull注释并将参数标记为不可为空.当然,当参数带有空值时,Kotlin会在运行时抛出异常.有什么方法可以覆盖Kotlin中的方法并忽略@NonNull注释?
具体来说,我正在使用适用于Android的appcompat库.该方法位于AppCompatActivity.java中
@CallSuper
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
}
Run Code Online (Sandbox Code Playgroud)
Kotlin中的覆盖:
override fun onSupportActionModeFinished(mode: ActionMode) {
super.onSupportActionModeFinished(mode)
}
Run Code Online (Sandbox Code Playgroud)
似乎没有直接的方法来抑制Kotlin编译器处理的可空性注释处理.
作为一种变通方法,可以使中间派生类与@Nullable在Java中注释:当科特林编译器同时看到@Nullable和@NonNull相同的代码元素,它的行为就好像没有空性的注释.然后在Kotlin中将其子类化.例:
考虑一个带有@NonNullJava参数的类:
abstract class Base {
public abstract void f(@NonNull String str);
//...
}
Run Code Online (Sandbox Code Playgroud)
Kotlin理解注释:f(str: String),类型是非null.
现在Base在Java中扩展,覆盖方法并@Nullable在参数中添加注释Intermediate:
abstract class Intermediate extends Base {
@Override
public abstract void f(@Nullable String str);
}
Run Code Online (Sandbox Code Playgroud)
因为Intermediate,Kotlin看到f(str: String!),参数具有平台类型,即其可空性未知.
之后,您将能够在Kotlin子类中声明可为空的参数Intermediate:
class Derived(): Intermediate() {
override fun f(url: String?) { ... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |