Почему передача {a, b, c} к методу не работает?

Используйте параметризованные тесты JUnit 4 . Они идеально подходят для такого рода проблем, хотя документации не хватает.

Вот несколько примеров того, как их использовать. junit-test /

  • http://isagoksu.com/2009/development/agile-development/test-driven-development/using-junit-parameterized-annotation/
  • http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/
    • 9
      задан Bill the Lizard 19 September 2012 в 22:15
      поделиться

      7 ответов

      При объявлении int [] и назначении {1, 2, 3} компилятор знает, что вы хотите создать int [ ] , как написано прямо здесь.

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

      QuickSort sort = new QuickSort(new int[] {8,12,79,12,50,44,8,0,7,289,1});
      

      , чтобы сообщить компилятору, что это за массив.

      20
      ответ дан 4 December 2019 в 06:23
      поделиться

      Вы пробовали преобразовать список в int [] перед передачей его конструктору?

      -1
      ответ дан 4 December 2019 в 06:23
      поделиться

      Конструкция {} называется инициализатором массива и используется для инициализации массива в Java. (Ссылка: Раздел 10.6: Инициализаторы массивов из Спецификация языка Java, третье издание .)

      Причина передачи {1, 2, 3} сам по себе недействителен, потому что нет информации о типе, связанной с инициализатором.

      Следовательно, нужно сообщить компилятору, что тип массива является типом, написав new Type [] , где Type - это тип, для которого создан массив.

      Все следующие допустимые варианты использования инициализатора массива:

      • new String [] {"Hello," World "}
      • new Character [] {'A', 'B'}
      • new Runnable [] {new Runnable () {public void run () {}}, new Runnable () {public void run () {}}

      Как видно, эта нотация может использоваться для многих типов данных, поэтому она не является чем-то специфическим для целых чисел.

      Что касается:

      int[] a = {1, 2, 3};
      

      Причина, по которой приведенное выше является допустимым, заключается в том, что информация о типе предоставляется компилятору в объявлении типа переменной, которым в данном случае является int [] . Сказанное выше подразумевает следующее:

      int[] a = new int[] {1, 2, 3};
      

      Теперь, если у нас есть new int [] {1, 2, 3} , мы можем создать новый int [] на месте, так что с ним можно работать, как с любым другим массивом int [] - просто с ним не связано имя переменной.

      Следовательно, массив, созданный new int [] {1, 2, 3} может быть отправлен в метод или конструктор, который принимает int [] в качестве аргумента:

      new Quicksort(new int[] {1, 2, 3});  // This will work.
      
      10
      ответ дан 4 December 2019 в 06:23
      поделиться

      Конфигурацию приложения можно разделить на две категории.

      1. Для конкретного приложения
      2. Для конкретного развертывания

      Конфигурация для конкретного приложения включает такие вещи, как реализация кэширования, реализация бизнес-правил и будет применяться при каждом развертывании приложения. Это должно войти в файл web.config, который является частью структуры каталогов приложения и проверяется в системе управления версиями.

      Конфигурация конкретного развертывания включает такие вещи, как строки подключения, периоды тайм-аута и т. Д., И может отличаться от одного развертывания к другому. Это должно быть введено как часть конфигурации экземпляра IIS, который задействован в развертывании и сохранен любой стратегией резервного копирования, применяемой для рассматриваемой машины.

      Насколько я могу судить, Попробуйте следующее:

      QuickSort sort = new QuickSort(new int[] {8,12,79,12,50,44,8,0,7,289,1});
      
      4
      ответ дан 4 December 2019 в 06:23
      поделиться

      Вы также можете сделать это так:

      public class QuickSort {
          int[] a;
      
          public QuickSort(int ... a) {
              this.a = a;
          }
      
          public static void main(String[] args) {
      
              QuickSort sort = new QuickSort(8,12,79,12,50,44,8,0,7,289,1);
          }
      }
      
      4
      ответ дан 4 December 2019 в 06:23
      поделиться

      В Java действительно нет вывода типов. Объявления переменных массива - это особый случай в спецификации языка Java, который не применяется к параметрам метода. Это было бы возможно, но добавило бы много сложностей в спецификацию, поскольку ей пришлось бы обрабатывать такие вопросы, как, создает ли {"a", "b"} String [] или Object [] - здесь это выглядит очевидным, но что, если это объекты сложной иерархии типов? А что, если метод перегружен и существуют обе версии?

      2
      ответ дан 4 December 2019 в 06:23
      поделиться

      Фигурные скобки (при использовании в литералах массива) можно использовать только при объявлении массива :)

      0
      ответ дан 4 December 2019 в 06:23
      поделиться
      Другие вопросы по тегам:

      Похожие вопросы: