Kotlin,get [ ] 运算符上的 NoSuchMethodError

Kotlin, NoSuchMethodError on the get [ ] operator

我在 mine 的第三方库中有这段代码:

class Program {

    val uniforms = HashMap<String, Int>()    
    operator fun get(s: String) = uniforms[s]!!
}

当我使用 [ ] 运算符时

glUniformMatrix4fv(uniformColor.uniforms["cameraToClipMatrix"], 1, false, matBuffer)

我明白了:

Caused by: java.lang.NoSuchMethodError: glsl.Program.get(Ljava/lang/String;)I

为什么?

一切似乎都很好

uniformColor.uniforms.contains["cameraToClipMatrix"]

return是真的,如果不是,它应该只是 return null

我错过了什么?

科特林 1.1-rc-91

这看起来像是 Kotlin 编译器中的错误。

Map.get在Java中是Object->Object,在Kotlin中是K->V。

我怀疑它导致实现生成 fun get(s: String):Any? 并且调用站点试图找到 fun get(s: String):Int.

这是我尝试过的示例,它适用于 1.1.0-rc-91 上的我(即使从 Java 调用它)。我错过了什么?

class Program {

    val uniforms = HashMap<String, Int>()

    operator fun get(s: String): Int = uniforms[s]!!

}

fun main(args: Array<String>) {

    val program = Program()

    program.uniforms.put("hello", 42)

    println(program["hello"])

}