8

受到另一个问题的启发。

fastutilIntArrayList中有一个具有以下 Java 签名的方法的类:

public void push(Integer o)

在 Kotlin 中,它被视为

push(o: Int)

是否有特定原因,Int而不是平台类型Int!

我希望它push(o: Int!)至少是因为在具有 Kotlin 源的项目中的 Java 源中定义的具有相同签名的方法具有Int!从 Kotlin 看到的参数类型(甚至在不同的模块中定义,甚至从该模块的 jar 导入!)。

此外,所描述的行为会导致与合法具有参数的(在同一类中)push(Integer o)发生冲突——它们都被视为. 如果有for ,就不会有冲突(我也尝试在我的代码中定义这对方法——仍然可以按我的预期工作,有)。push(int o)Intpush(o: Int)Int!IntegerInt!


Kotlin 版本是1.0.2.

Gradle 依赖项fastutil

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

1 回答 1

10

我怀疑这是一个 kotlin 编译器错误。IntStack这里的问题出在由以下实现的接口中IntArrayList

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

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

Kotlinpush(Int)在 interface 中只看到一个方法IntStack,或者更准确地说,kotlin 错误地认为这push(int i)是方法的覆盖push(T t)

于 2016-06-04T10:49:45.343 回答