Переменная методами арность

Методы переменной валентности, которые иногда называют как varargs методами, принять произвольным набором аргументов. До JDK 5.0, если вы хотели передать произвольный набор аргументов в метод, вам нужно пройти целый ряд объектов. Кроме того, вы не можете использовать переменную списков спор с методами, такими как формат метода класса MessageFormat или новых для JDK 5.0 Е методом PrintStream добавить дополнительные аргументы для каждого настоящего форматирования строки.

JDK 5.0 добавляет объекты varargs Это намного более гибкой. Чтобы изучить varargs объекте, давайте посмотрим на JDK 5.0 версии одной из Е методов в классе PrintStream:


     public PrintStream printf(String format,

                             Object... args)

По существу, первым аргументом является строка, с тем местом, держатели заполнены аргументами, которые следуют. Три точки по второму аргументу показывают, что последний аргумент может быть передан как массив или как последовательность аргументов. Обратите внимание, что три точки, похожие на какие переменные Списки аргументов, указанных в С и С программирования.

Количество мест держателями форматирования строки определяет, сколько аргументов там должны быть. Например, для форматирования строки "Hello,% 1S \\ nToday% 2 $ TB% 2 $ Т.,% 2 $ TY", нужно предоставить два аргумента: первый аргумент типа строка, а второй тип даты. Вот пример:


   import java.util.*;



   public class Today {

     public static void main(String args[]) {

       System.out.printf(

         "Hello, %1s%nToday is %2$tB %2$te, %2$tY%n",

         args[0]new Date());

     }

   }

При условии, что вы передаете в качестве аргумента для имени, результаты могли бы быть чем-то вроде следующего:

> java Today Ed
Hello, Ed
Today is October 18, 2005

Autoboxing и распаковки, позволяющие обеспечить примитивными аргументами типа (как в следующий способ Е):


   System.out.printf("Pi is approximately  %f", Math.PI, %n);

Здесь, Math.PI имеет тип вдвое. Autoboxing преобразует его в объект типа double. (Более подробную информацию о autoboxing см. 5 апреля 2005 отзыв Введение в Autoboxing).

Если вы создаете свои собственные методы принять переменная Списки аргументов, только последний аргумент метода может быть объявлен, как принятие список переменных. Вы не можете поставить переменной длины первого аргумента. Например, следующее объявление метод применим — он определяет метод, который имеет один параметр, который принимает переменное количество аргументов String:


  private static void method1(String... args)

Переменный параметр аргумент не должна быть единственным аргументом. Например, следующий метод принимает один целочисленный аргумент следует произвольное число аргументов.


  private static void method2(int arg, Object... args) {

Полагая методы, которые имеют двух форматах показано выше, в виде пробного класса позволяет вызывать методы с различным числом аргументов:


      method1("Hello""World");

      method1(args);

      method2(12'a'"Hello", Math.PI, 1/3.0);

      method2(1894.0);

Последнего вызова, показанный выше, несколько отличается от остальных. Он принимает строку [] аргументом, который вступает в основной () метод. Поскольку varargs объекта только неявный синтаксис для создания и передачи массивов, массив может быть передана напрямую. В этом случае, компилятор просто передать массив без изменений.

Вот пример класса, MyArgs, что включает в себя два вида методов:


   import java.util.*;



   public class MyArgs {

     public static void main(String args[]) {

       method1(12'a'"Hello", Math.PI, 1/3.0);

       method1(1894.0);

       method2("Hello""World");

       method2(args);

     }



     private static void method1(int arg, Object... args) {

       System.out.println(Arrays.asList(args" / " + arg);

     }



     private static void method2(String... args) {

       System.out.println(Arrays.asList(args

         " // " + args.length);

     }

   }

Вот пример запуска из MyArgs:

> java MyArgs x y z
[a, Hello, 3.141592653589793, 0.3333333333333333] / 12
[94.0] / 18
[Hello, World] // 2
[x, y, z] // 3

MyArgs доступ к переменным списком аргументов, передав его на рассмотрение Arrays.asList () метода. Иными словами, аргумент доступен как массив. Как правило, вы могли бы сделать что-то больше похоже на следующее в расширенном цикле:


  for (String arg: args) {

    ...

  }

Это позволит вам одним элементом процесса одновременно.

Как вы можете видеть, без особых усилий программирования, varargs функция позволяет определить методы, которые принимают переменное количество аргументов. Для получения дополнительной информации о varargs см. Varargs.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>