![](/img/trans.png)
[英]error java The method combinationSum(int[], int, List<Integer>) in the type Solution is not applicable for the arguments (int[], int, boolean)
[英]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.