Пять минут на изучение Java: что такое переменный параметр?

Java
Пять минут на изучение Java: что такое переменный параметр?

Просматривая Programcreek, я нашел несколько тем, посвященных основам, но которые нельзя игнорировать. Например: что такое вариативные параметры в Java? Подобные душераздирающие темы заслуживают более пристального внимания.

яРаньше я не обращал особого внимания на основы. Возьмем, к примеру, сегодняшнюю тему, вариативна она или нет, это всего лишь параметр, а вопросов еще много — с таким настроем я бегаю по арене уже почти десять лет (кривая улыбка). Но когда ко мне приходят читатели, чтобы задать какие-то элементарные вопросы, я с трудом могу на них ответить и чувствую, что мои знания разбросаны или поверхностны. К счастью, в последнее время я начал просыпаться и начинать не упускать ни одной детали, постепенно у меня появляется небольшой «запас знаний».

Хорошо, теперь давайте приступим к делу. Что такое вариативные параметры в Java?

Переменные параметры — это функция, представленная в Java 1.5, которая позволяет методам использовать любое количество одного и того же типа (is-a) в качестве параметра. Как показано ниже.

public static void main(String[] args) {
    print("沉");
    print("沉", "默");
    print("沉", "默", "王");
    print("沉", "默", "王", "二");
}

public static void print(String... strs) {
    for (String s : strs)
        System.out.print(s);
    System.out.println();
}

статический методprint()используются переменные параметры, поэтомуprint("沉")Могу,print("沉", "默")Кроме того, в качестве аргументов можно передать даже 3, 4 или более строк.print()метод.

Говоря о переменных параметрах, я помню, что в руководстве по разработке Alibaba есть такая оговорка.

Смысл в том, чтобы постараться не использовать переменные параметры, если вы хотите их использовать, переменные параметры должны быть в конце списка параметров. Поскольку яма ограничена, она может быть только в конце, поэтому переменный параметр может быть только один (полегче, полегче). Если переменный параметр не находится в последней цифре, IDE предложит соответствующую ошибку, как показано на следующем рисунке.

Так как же работают переменные параметры?

Принцип тоже очень простой.При использовании переменных параметров, по сути, сначала создается массив, размер массива равен количеству переменных параметров, затем параметры заносятся в массив, а затем массив передается вызываемому методу.

Это основная причина, по которой вы можете использовать массивы в качестве параметров для вызова методов с переменными параметрами. Код показан ниже.

public static void main(String[] args) {
    print(new String[]{"沉"});
    print(new String[]{"沉", "默"});
    print(new String[]{"沉", "默", "王"});
    print(new String[]{"沉", "默", "王", "二"});
}

public static void print(String... strs) {
    for (String s : strs)
        System.out.print(s);
    System.out.println();
}

Итак, если параметр метода является массивом, а затем вызвать метод, как с использованием переменных параметров, будет ли он работать? Если вам интересно, попробуйте (это не работает, тсссс).

Итак, когда вы обычно используете переменные параметры?

Переменные параметры, переменные параметры, как следует из названия, переменные параметры могут быть определены, когда метод должен обрабатывать любое количество объектов одного и того же типа. Хорошим примером в Java является класс String.format()метод, как показано ниже.

System.out.println(String.format("年纪是: %d", 18));
System.out.println(String.format("年纪是: %d 名字是: %s", 18, "沉默王二"));

PS:%dозначает форматирование целого числа как десятичного целого числа,%sПредставляет выходную строку.

Если переменные параметры не используются, параметры, которые необходимо отформатировать, должны быть объединены с помощью оператора «+». Беда тоже в беде.

В реальном коде проекта вывод журнала пакета с открытым исходным кодом slf4j.jar часто использует переменные параметры (log4j не может использовать переменные параметры, и записывать несколько параметров в журнал неудобно). Как показано ниже.

protected Logger logger = LoggerFactory.getLogger(getClass());
logger.debug("名字是{}", mem.getName());
logger.debug("名字是{},年纪是{}", mem.getName(), mem.getAge());

Вы можете найти его, посмотрев исходный код,debug()Вариативные параметры, используемые методом.

public void debug(String format, Object... arguments);

Существуют ли какие-либо меры предосторожности при использовании переменных параметров?

Да, да. Мы хотим избежать перегрузки методов вариативными параметрами — компилятор может легко засомневаться в себе.

public static void main(String[] args) {
    print(null);
}

public static void print(String... strs) {
    for (String a : strs)
        System.out.print(a);
    System.out.println();
}

public static void print(Integer... ints) {
    for (Integer i : ints)
        System.out.print(i);
    System.out.println();
}

В этот момент компилятор абсолютно не знает, что вызывать.print()метод,print(String... strs)ещеprint(Integer... ints), тупо неразличимо.

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

public static void main(String[] args) {
    String [] strs = null;
    print(strs);

    Integer [] ints = null;
    print(ints);
}

public static void print(String... strs) {
}

public static void print(Integer... ints) {
}

Приведенный выше код может быть скомпилирован и передан. потому что компилятор знаетАргументыЭто тип String или тип Integer, просто чтобы среда выполнения не выбрасывалаNullPointerException,дваprint()Внутренности метода должны быть выполнены хорошоПустойоперация.


Ну что же, читатели и друзья, вышеизложенное и есть все содержание этой статьи.Здесь вы видите лучших программистов, именно вы получаете повышение и прибавку к зарплате.👍. Если вам это не нравится и вы хотите увидеть больше, я порекомендую вам еще несколько статей.

Как получить длину массивов и строк в Java? длина или длина ()?

Почему строки Java неизменяемы?

Как работает подстрока Java()?

Как проверить, содержится ли определенное значение в массиве Java?

Быть оригинальным не просто, если считаешь это полезным, не скупись на рукиподобноЕсли вы хотите впервые увидеть обновленные статьи второго брата, отсканируйте QR-код ниже и подпишитесь на официальный аккаунт Silent King Er. До встречи в нашей следующей статье!