Любой способ объявить массив в строке?

Скажем, у меня есть метод m(), который принимает массив строк в качестве аргумента. Есть ли способ, которым я могу просто объявить этот массив в строке при выполнении вызова? т.е. вместо:

String[] strs = {"blah", "hey", "yo"};
m(strs);

Можно ли просто заменить это одной строкой и не объявлять именованную переменную, которую я никогда не буду использовать?

Ответ 1

m(new String[]{"blah", "hey", "yo"});

Ответ 2

Демон прав. Вы также можете объявить m как принятие varargs:

void m(String... strs) {
    // strs is seen as a normal String[] inside the method
}

m("blah", "hey", "yo"); // no [] or {} needed; each string is a separate arg here

Ответ 3

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

Arrays.asList(new String[] { "String1", "string2" });

Ответ 4

Я хотел бы добавить, что синтаксис инициализации массива очень краткий и гибкий. Я использую его LOT для извлечения данных из моего кода и размещения его где-то более пригодным для использования.

В качестве примера я часто создавал такие меню:

Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});

Это позволит мне написать код для создания системы меню. "+" Достаточно, чтобы сказать ему, чтобы поместить этот элемент в предыдущий элемент.

Я мог бы привязать его к классу menuHandler либо с помощью соглашения об именовании методов, назвав мои методы чем-то вроде "menuFile, menuFileSave, menuFileLoad,..." и отражающим их (другие варианты).

Этот синтаксис позволяет ИЗМЕРИТЕЛЬНО краткое определение меню и чрезвычайно многоразовый метод "initMenus". (Тем не менее, я не беспокоюсь о повторном использовании, потому что всегда интересно писать и занимает всего несколько минут + несколько строк кода).

в любое время, когда вы видите шаблон в своем коде, посмотрите, можете ли вы заменить его чем-то подобным, и всегда помните, насколько сжатым является синтаксис инициализации массива!.

Ответ 5

Вы можете создать метод где-нибудь

public static <T> T[] toArray(T... ts) {
    return ts;
}

затем используйте его

m(toArray("blah", "hey", "yo"));

для лучшего просмотра.

Ответ 6

Как говорит Дремон, наиболее близким к тому, что Java подходит для встроенных массивов, является new String[]{"blah", "hey", "yo"}, но есть опрятный трюк, который позволяет вам делать что-то вроде

array("blah", "hey", "yo") с автоматически определяемым типом.

Я работал над полезным API для расширения языка Java, чтобы разрешать встроенные массивы и типы коллекций. Для получения дополнительной информации google project Espresso4J или ознакомьтесь с ней здесь