Kotlin 不允许 charAt

Not*_*You 6 java kotlin

为什么java能编译而kotlin不能编译?以及如何charAt在kotlin中调用?

爪哇:

import java.nio.CharBuffer;

public class Test {
    public static void test() {
        CharBuffer buffer = CharBuffer.wrap("asd");
        buffer.charAt(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

科特林:

import java.nio.CharBuffer

class TestKotlin {
    fun test() {
        val buffer = CharBuffer.wrap("asd")
        buffer.charAt(0)
    }
}
Run Code Online (Sandbox Code Playgroud)

Ten*_*r04 4

我从这个老问题中得出理论,Kotlin 开发人员曾经不小心将CharBuffer.charAt()CharBuffer.get()视为等效,并将该charAt()方法隐藏在 Kotlin 中并将其映射到get(). 他们这样做可能是为了促进数组访问语法(括号)的使用并避免所谓的冗余。

也许后来当上述问题得到解决时,他们错过了取消隐藏该方法的机会。

buffer.charAt(i)buffer[buffer.position() + i]在 Kotlin 中。您可以编写一个扩展函数,以便可以继续使用它:

fun CharBuffer.charAt(index: Int) = this[position() + index]
Run Code Online (Sandbox Code Playgroud)

如果您选择越界索引,则错误消息的信息量将略低于原始方法中的信息。

也许有人应该为此在 YouTrack 上提出一个问题......