是什么让 Kotlin 中的字符串 class 能够使用方括号?

What makes the String class in Kotlin to be able to work with square brackets?

在 Kotlin 中你可以这样做:

val s: String = "Hey"
println(s[1])

或者简单地说:

println("Hey"[1])

你将打印 e.

但是如果您想将此行为扩展到您自己的 classes 怎么办?您需要实现什么接口来完成此语法?

我查看了String的超类型,只发现了Comparable<String>CharSequence,它们本身都没有任何其他超类型,所以我的探索提前结束了。

例如在 Python 中,通过在 class 中定义一个名为 __getitem__ 的方法,您可以赋予 class 的对象使用的能力像这样的方括号语法 a[i];我想知道这在 Kotlin 中是如何实现的。

提前致谢。

您可以使用 Kotlin 的运算符重载,特别是 indexed access operators.

的重载

语法 "Hey"[1] 只是 "Hey".get(1) 的别名(如果不在赋值的 left-hand 一侧,它将是 "Hey".set(1, ...) 的别名) .

显然只要有一个方法 get(i: Int) 就足够了。有意思...