在Kotlin ,你可以这样做:

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

或者简单地说:

println("Hey"[1])

你会打印e张.

但是如果你想把这种行为扩展到你自己的类呢?要实现这种语法,需要实现什么接口?

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

例如,在Python中,通过在一个类中定义一个名为__getitem__的方法,可以赋予该类的对象与方括号语法一起使用的能力,如a[i];我想知道这在Kotlin 怎么可能.

提前谢谢.

推荐答案

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

语法"Hey"[1]只是"Hey".get(1)的别名(如果不是在赋值的左侧,那么它将是"Hey".set(1, ...)的别名).

Kotlin相关问答推荐

将文本与文本字段的内容对齐

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

多模块Kotlin项目中的FreeFair

使用 Kotlin 的 Springboot 中缺少 ResponseEntity 正文属性

kotlin 父类具有依赖于抽象变量的变量

使用空键映射获取

Kotlin spring boot @RequestBody 验证未触发

Kotlin 单元测试 - 如何模拟 Companion 对象的组件?

带有迭代器函数的 Kotlin 无限序列

ActivityOptions.makeSceneTransitionAnimation 在具有多个视图的 kotlin 中不起作用

在 Kotlin 中实现 (/inherit/~extend) 注解

Kotlin惰性默认属性

Kotlin中的测试无法访问受保护(protected)的方法

如何在kotlin语言中将字符转换为ascii值

使用导航组件在不同的图形之间导航

我们如何在Java注释声明中引用Kotlin常量?

如果作为 RxJava Observable 提供,Kotlin 密封类子类需要强制转换为基类

如何使用mockk库模拟android上下文

如何在 Kotlin 中将串联转换为模板

Android Jetpack Compose - 图像无法zoom 到框的宽度和高度