请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于operator

之前使用operator来实现自定义操作符 比如+ -这些在创建方法时需要operator修饰方法 但是这段代码

class MyIntList {
    private val list = ArrayList<Int>()
    fun add(i: Int) {
        list.add(i)
    }

    fun remove(index: Int) {
        list.remove(index)
    }

    operator fun iterator(): MyIterator {
        return MyIterator(list.iterator())
    }
}

class MyIterator(val iterator: Iterator<Int>) {

    operator fun next(): Int {
        return iterator.next()
    }

    operator fun hasNext(): Boolean {
        return iterator.hasNext()
    }

next 和hasNext用operator 是什么作用 iterator()方法用operator修饰 又是什么作用呢 这个操作符到底什么时候使用 什么场景呢

正在回答

1回答

这意思就是这几个方法也是运算符方法,定义的时候加上operator编译器会支持一些运算符的功能,例如for ... in ...就要求有iterator,这里面也隐含了对next的调用

1 回复 有任何疑惑可以回复我~
  • 提问者 慕妹2978617 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-11-15 16:20:39
  • 提问者 慕妹2978617 #2
    谢谢老师 回答的也太快了。不过如果我要定义一个方法 我怎么知道 它是否支持运算符表达 ,这个比如您说的:例如for ... in ...就要求有iterator 我要知道可以这么表达 我才会去用operator 但是对于一个方法是否加operator修饰是通过经验?还是通过相关联的方法决定的呢
    回复 有任何疑惑可以回复我~ 2019-11-15 16:24:12
  • bennyhuo 回复 提问者 慕妹2978617 #3
    这个在官方文档中有一页专门介绍了各种支持的运算符,支持的不是很多。
    
    有个小技巧,你可以在一些方法,例如  xxx in yyy 的地方用鼠标点击 in 这个关键字,会跳转到对应的运算符,类似的还有 get set 对应的方括号之类的~
    回复 有任何疑惑可以回复我~ 2019-11-15 16:37:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信