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中将其子类化.例:
考虑一个带有@NonNull
Java参数的类:
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 次 |
最近记录: |