Ответ 1
m(new String[]{"blah", "hey", "yo"});
Скажем, у меня есть метод m(), который принимает массив строк в качестве аргумента. Есть ли способ, которым я могу просто объявить этот массив в строке при выполнении вызова? т.е. вместо:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Можно ли просто заменить это одной строкой и не объявлять именованную переменную, которую я никогда не буду использовать?
m(new String[]{"blah", "hey", "yo"});
Демон прав. Вы также можете объявить 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
Другой способ сделать это, если вы хотите получить результат как встроенный список, вы можете сделать это следующим образом:
Arrays.asList(new String[] { "String1", "string2" });
Я хотел бы добавить, что синтаксис инициализации массива очень краткий и гибкий. Я использую его LOT для извлечения данных из моего кода и размещения его где-то более пригодным для использования.
В качестве примера я часто создавал такие меню:
Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});
Это позволит мне написать код для создания системы меню. "+" Достаточно, чтобы сказать ему, чтобы поместить этот элемент в предыдущий элемент.
Я мог бы привязать его к классу menuHandler либо с помощью соглашения об именовании методов, назвав мои методы чем-то вроде "menuFile, menuFileSave, menuFileLoad,..." и отражающим их (другие варианты).
Этот синтаксис позволяет ИЗМЕРИТЕЛЬНО краткое определение меню и чрезвычайно многоразовый метод "initMenus". (Тем не менее, я не беспокоюсь о повторном использовании, потому что всегда интересно писать и занимает всего несколько минут + несколько строк кода).
в любое время, когда вы видите шаблон в своем коде, посмотрите, можете ли вы заменить его чем-то подобным, и всегда помните, насколько сжатым является синтаксис инициализации массива!.
Вы можете создать метод где-нибудь
public static <T> T[] toArray(T... ts) {
return ts;
}
затем используйте его
m(toArray("blah", "hey", "yo"));
для лучшего просмотра.
Как говорит Дремон, наиболее близким к тому, что Java подходит для встроенных массивов, является new String[]{"blah", "hey", "yo"}
, но есть опрятный трюк, который позволяет вам делать что-то вроде
array("blah", "hey", "yo")
с автоматически определяемым типом.
Я работал над полезным API для расширения языка Java, чтобы разрешать встроенные массивы и типы коллекций. Для получения дополнительной информации google project Espresso4J или ознакомьтесь с ней здесь