Предупреждение компилятора IntelliJ о распространении пустого массива для varargs - PullRequest
1 голос
/ 28 марта 2020

У меня есть этот класс, который принимает параметр varargs и ключ в первичном конструкторе, и вторичный конструктор, которому требуется только ключ, затем при вызове первичного конструктора я просто передаю пустой массив и распространяю его *emptyArray<String> .

class AppendableParameter(val key: String, vararg parameters: String) {
    constructor(key: String) : this(key, *emptyArray<String>())
}

Код работает нормально, но IntelliJ выдает мне предупреждение:

Remove redundant spread operator

Если я удаляю его, он не будет работать как он я ожидал String, и «предлагаемое исправление» от IntelliJ просто удаляет параметр, делая вызов конструктора недействительным.

Возможно, это ошибка в системе IntelliJ, или я упустил что-то тривиальное?

1 Ответ

2 голосов
/ 28 марта 2020

Я не могу говорить с предупреждением, выданным IntelliJ, но ваш вторичный конструктор не нужен. Можно вызывать методы с параметром varargs без передачи аргументов для указанного параметра varargs, что аналогично передаче пустого массива. Другими словами, имея:

class Foo(val key: String, vararg params: String)

Уже давайте вызывать основной конструктор следующим образом:

val foo = Foo("key")

Если вы хотите использовать непустой массив, если аргумент не задан тогда вы можете указать аргумент по умолчанию:

class Foo(
    val key: String,
    vararg params: String = arrayOf("default", "params")
) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...