![](/img/trans.png)
[英]How do I call a Java method that takes a Non-null Void parameter from Kotlin?
[英]How do I force a Java call to overloaded Kotlin method accepting a non-nulllable parameter?
在Kotlin中,我在對象上定義了兩個重載方法。 它們具有相同的簽名,除了在一種情況下,一個參數可以為空,而在另一種情況下,該參數不能為空。 根據傳入的參數是否可以為空,選擇一個重載而不是另一個:
fun getBooleanPropertyValue(key: String, dflt: Boolean? = null) : Optional<Boolean> {
}
fun getBooleanPropertyValue(key: String, dflt: Boolean) : Boolean {
}
我希望很清楚這里發生了什么。 如果我可以為一個屬性提供一個非空的默認值,那么該類始終可以為該屬性返回一個非空的值,因此它將直接返回它。 如果我不能提供不可為null的默認值,則該類將返回Optional
因為它無法確定它可以傳遞回非null對象。
這一切在Kotlin上都很好用,但是現在我想從Java調用非空版本。 我有這樣的事情:
static final Boolean defaultIsDisabled = false;
Boolean isDisabled = propSource.getBooleanPropertyValue("isDisabled", defaultIsDisabled);
我在這里遇到錯誤,因為Java調用了接受非空默認值的方法,因此返回Optional
,並且我試圖將其分配給Boolean
。 但是在這種情況下,我傳遞的默認值永遠不能為null
而我想直接取回Boolean
。
我知道Java可以調用其他方法,因為這可以工作:
Boolean isDisabled = propSource.getBooleanPropertyValue("isDisabled", false);
我嘗試在defaultIsDisabled
值上使用@Notnull/@Nonnull
批注的各種defaultIsDisabled
來告訴Java它永遠不能為null
,但是我不知道如何讓Java調用返回裸機的方法版本Boolean
。
誰能告訴我如何讓Java調用此方法的版本,該版本接受非空的默認值,同時通過變量提供該值?
非空Boolean
boolean
在Java中只是boolean
。 要調用非null重載,只需使用強制轉換:
static final Boolean defaultIsDisabled = false;
boolean isDisabled = propSource.getBooleanPropertyValue("isDisabled", (boolean) defaultIsDisabled);
這只行得通,因為Kotlin優化了第二種方法以接受boolean
而不是Boolean
,因此這兩種方法的簽名在生成的字節碼中是不同的。 如果等效方法接受String
參數,則無法從Java調用這兩種方法。 Kotlin創建兩個具有相同簽名的方法,並且當您嘗試從Java調用其中一個時,會出現“模棱兩可的方法調用”錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.