hot*_*key 8 java parameters kotlin fastutil
灵感来自另一个问题.
在fastutil库中有IntArrayList一个类,它有一个带有以下Java签名的方法:
public void push(Integer o)
Run Code Online (Sandbox Code Playgroud)
来自Kotlin,它被视为
push(o: Int)
Run Code Online (Sandbox Code Playgroud)
是否有特定原因Int而不是平台类型Int!?
我预计它push(o: Int!)至少是因为在项目中使用Kotlin源在Java源代码中定义的相同签名的方法具有Int!从Kotlin看到的参数类型(甚至在不同的模块中定义,甚至从该模块的jar中导入!).
此外,所描述的行为导致push(Integer o)与push(int o)具有Int参数合法的(在同一类中)冲突- 它们都被视为push(o: Int).如果有Int!对Integer,就没有冲突(我也试过在我的代码来定义这个对方法-仍然是如我所料,有Int!).
Kotlin版本是1.0.2.
Gradle依赖fastutil:
compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'
Run Code Online (Sandbox Code Playgroud)
小智 10
我怀疑这是一个kotlin编译器错误.这里的问题是在接口IntStack中实现的IntArrayList:
interface Stack<T> {
void push(T t);
}
interface IntStack extends Stack<Integer> {
void push(int i);
}
Run Code Online (Sandbox Code Playgroud)
Kotlin push(Int)在界面中只看到一种方法IntStack,或者更准确地说,kotlin错误地认为这push(int i)是方法的重写push(T t).