簡體   English   中英

為什么Java方法的Integer參數映射到Int而不是平台類型?

[英]Why is Integer parameter of Java method mapped to Int and not platform type?

靈感來自另一個問題

fastutil庫中有IntArrayList類,它有一個帶有以下Java簽名的方法:

public void push(Integer o)

來自Kotlin,它被視為

push(o: Int)

是否有一個特定的原因,它是Int而不是平台類型Int!

我期望它是push(o: Int!) ,至少因為在項目中使用Kotlin源在Java源中定義的相同簽名的方法有Int! 作為從Kotlin看到的參數類型(甚至在不同的模塊中定義,甚至從該模塊的jar中導入!)。

此外,所描述的行為導致push(Integer o)與具有Int參數的push(int o) (在同一類中)合法沖突 - 它們都被視為push(o: Int) 如果有Int! 對於Integer ,不會有沖突(我也嘗試在我的代碼中定義這對方法 - 仍然按照我的預期工作,有Int! )。


Kotlin版本是1.0.2

fastutil Gradle依賴:

compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'

我懷疑這是一個kotlin編譯器錯誤。 這里的問題是在IntStack接口中,由IntArrayList實現:

interface Stack<T> {
    void push(T t);
}

interface IntStack extends Stack<Integer> {
    void push(int i);
}

Kotlin只在接口IntStack看到一個方法push(Int) ,或者更確切地說,kotlin錯誤地認為push(int i)是方法push(T t)的覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM