将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,...)。问题:
  • 是一个错误吗?
  • 是否有强制解决方法?
  • 古代的Pre-Collection时代vararg概念是如何渗透到现代编程语言的?
  • 最佳答案

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

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

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

    10-08 17:36