Допустим, у меня есть метод m (), который принимает массив строк в качестве аргумента. Есть ли способ, которым я могу просто объявить этот массив в строке, когда я делаю вызов? т.е. вместо:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Могу ли я просто заменить это одной строкой и избежать объявления именованной переменной, которую я никогда не собираюсь использовать?
Ответы:
источник
Демон правильный. Вы также можете объявить,
m
что принимаете varargs :источник
void m(String... strs, Integer... intgrs)
например.void m(Integer i, Double d, String... str)
(String ... strs)
Другой способ сделать это, если вы хотите, чтобы результат был встроен в List, вы можете сделать это следующим образом:
источник
Arrays.asList("string1", "string2", ...)
List
изtype[]
которыхtype
является то , что примитивно. например,Arrays.asList([some ints])
приводит кList<int[]>
.set
возвращенный объект,List
и он изменит массив.Вы можете напрямую написать массив в современной Java без инициализатора. Ваш пример теперь действителен. Как правило, лучше всего назвать параметр в любом случае.
или
Если вам нужно встроить, вам нужно объявить тип:
или используйте varargs (переменные аргументы)
Надеемся, что разработчики Java разрешат неявную инициализацию в будущем
Обновление: Kotlin Ответ
Kotlin сделал работу с массивами намного проще! Для большинства типов просто используйте,
arrayOf
и он будет неявно определять тип. Не пропустите ничего, чтобы оставить их пустыми.Примитивы имеют функции полезности. Не пропустите ничего, чтобы оставить их пустыми.
Если у вас уже есть
Collection
и вы хотите преобразовать его в массив, просто используйте:Если вам нужно привести тип массива, используйте:
источник
doSomething({"blah", "hey", "yo"})
, о чем спрашивал оригинальный вопрос.Вы можете создать метод где-нибудь
тогда используй это
для лучшего взгляда.
источник
Я хотел бы добавить, что синтаксис инициализации массива очень лаконичен и гибок. Я использую это много, чтобы извлечь данные из моего кода и разместить его где-то более удобным для использования.
Например, я часто создавал такие меню:
Это позволило бы мне написать код для настройки системы меню. «+» Достаточно, чтобы сказать ему, чтобы поместить этот элемент под предыдущим элементом.
Я мог бы связать его с классом menuHandler либо по соглашению об именах методов, назвав мои методы чем-то вроде «menuFile, menuFileSave, menuFileLoad, ...» и связав их рефлексивно (есть и другие альтернативы).
Этот синтаксис позволяет ИЗУМИТЕЛЬНО короткое определение меню и чрезвычайно многократно используемый метод initMenus. (Тем не менее, я не беспокоюсь о том, чтобы использовать его повторно, потому что писать это всегда весело и занимает всего несколько минут + несколько строк кода).
всякий раз, когда вы видите шаблон в своем коде, посмотрите, можете ли вы заменить его чем-то вроде этого, и всегда помните, насколько лаконичен синтаксис инициализации массива !.
источник
Другой вариант - использовать ArrayUtils.toArray в org.apache.commons.lang3.
источник
Как говорит Draemon, Java ближе всего подходит для встроенных массивов,
new String[]{"blah", "hey", "yo"}
однако есть хитрый трюк, который позволяет вам делать что-то вродеarray("blah", "hey", "yo")
с типом, автоматически выведенным.Я работал над полезным API для расширения языка Java, чтобы учесть встроенные массивы и типы коллекций. Для более подробной информации о проекте Google Espresso4J или проверить его здесь
источник