Как объявить массив в одну строку?
У меня есть метод m(), который принимает массив строк в качестве аргумента. Есть ли способ объявить этот массив прямо в строке вызова метода? Например, вместо того чтобы писать:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Могу ли я просто заменить это на одну строку, чтобы избежать объявления именованной переменной, которую я никогда не собираюсь использовать?
5 ответ(ов)
Вызов метода m
с аргументом new String[]{"blah", "hey", "yo"}
создает новый массив строк, содержащий элементы "blah", "hey" и "yo". Этот массив передается в метод m
. Если у вас есть конкретные вопросы о методе или его реализации, пожалуйста, уточните!
Вы можете создать метод, который принимает переменное количество аргументов и возвращает массив. Например:
public static <T> T[] toArray(T... ts) {
return ts;
}
После этого вы сможете использовать этот метод следующим образом:
m(toArray("blah", "hey", "yo"));
Это придаст вашему коду более аккуратный вид.
В современном Java вы можете напрямую записывать массив, без инициализатора. Ваш пример теперь допустим. Обычно лучше давать параметры имена, но можно использовать и такой подход:
String[] array = {"blah", "hey", "yo"};
или
int[] array = {1, 2, 3};
Если вам необходимо использовать массив в инлайн-выражении, вам нужно будет явно указать тип:
functionCall(new String[]{"blah", "hey", "yo"});
Либо используйте varargs (переменное количество аргументов):
void functionCall(String... stringArray) {
// Это будет массивом String[], содержащим любое количество элементов или пустым
}
functionCall("blah", "hey", "yo");
Надеемся, разработчики Java в будущем позволят неявную инициализацию массивов.
Обновление: Ответ для Kotlin
Kotlin значительно упростил работу с массивами! Для большинства типов просто используйте arrayOf
, и он автоматически определит тип. Не передавайте ничего, чтобы оставить массив пустым.
arrayOf("1", "2", "3") // String
arrayOf(1, 2, 3) // Int
arrayOf(1, 2, "foo") // Any
arrayOf<Int>(1, 2, 3) // Явное указание типа
arrayOf<String>() // Пустой массив строк
Для примитивов существуют утилитарные функции. Не передавайте ничего, чтобы оставить их пустыми:
intArrayOf(1, 2, 3)
charArrayOf()
booleanArrayOf()
longArrayOf()
shortArrayOf()
byteArrayOf()
Если у вас уже есть Collection
и вы хотите преобразовать его в массив, используйте:
collection.toTypedArray()
Если вам нужно привести массив к другому типу, используйте:
array.toIntArray()
array.toLongArray()
array.toCharArray()
// и т.д.
Другой способ сделать это, если вы хотите получить результат в виде списка, можно сделать так:
Arrays.asList(new String[] { "String1", "string2" });
Другой вариант — использовать метод ArrayUtils.toArray
из библиотеки org.apache.commons.lang3
. Пример кода:
ArrayUtils.toArray("elem1", "elem2");
Этот метод позволяет создать массив из указанного количества элементов, что может быть удобно в различных случаях, когда вам нужно работа с массивами в Java. Если у вас есть дополнительные вопросы по использованию этой библиотеки, не стесняйтесь спрашивать!
Как определить, содержится ли определенное значение в массиве в Java?
Как объединить два массива в Java?
Преобразование 'ArrayList<String>' в 'String[]' в Java
Как создать обобщённый массив в Java?
Java: как преобразовать массив байтов в строку шестнадцатеричного формата?