扩展运算符函数调用的歧义

时间:2019-02-25 21:07:55

标签: intellij-idea kotlin

将Java StringTokenizer转换为kotlin拆分时,我无法提供字符定界符列表:

val delim : Array<Char> = arrayOf('(',')','{','}','[',/*many more...*/)
sourceExpr.split(delimiters=*delim,ignoreCase=false,limit=0)

在这里,由于某种原因,kotlin编译器无法在split(vararg String,...)split(vararg Char,...)之间进行歧义。问题:

  1. 是个错误吗?
  2. 有没有变通方法?
  3. 古代的收藏前时代vararg概念如何渗透到现代编程语言中?

1 个答案:

答案 0 :(得分:5)

问题不是消除歧义,而是类型不正确。在Kotlin中,Array<Char>等效于Java Character[]。这意味着当您使用*delim时,实际上是在创建vararg Character(而不是vararg Char)。

相反,您应该更喜欢原始的CharArray

val delim: CharArray = charArrayOf('(', ')', '{', '}')
sourceExpr.split(delimiters = *delim, ignoreCase = false, limit = 0)