неоднозначность вызова функции оператора распространения - PullRequest
0 голосов
/ 26 февраля 2019

При преобразовании 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 голосов
/ 26 февраля 2019

Проблема не в неоднозначности, а в неправильном типе.В Kotlin Array<Char> эквивалентен Java Character[].Это означает, что когда вы используете *delim, вы фактически создаете vararg Character (вместо vararg Char).

Вместо этого вы должны предпочесть специфичные для примитива CharArray:

val delim: CharArray = charArrayOf('(', ')', '{', '}')
sourceExpr.split(delimiters = *delim, ignoreCase = false, limit = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...