Подтвердить что ты не робот

Инициализация массива строк в качестве параметра конструктора

В Java полностью законно инициализировать массив String следующим образом:

String[] s = {"FOO", "BAR"};

Однако при попытке создать экземпляр класса, который принимает массив String в качестве параметра, следующий фрагмент кода НЕ допускается:

Test t = new Test({"test"});

Но это снова работает:

Test t = new Test(new String[] {"test"});

Может кто-нибудь объяснить, почему это?

4b9b3361

Ответ 1

String[] s = {"FOO", "BAR"};  

это разрешено только во время объявления

Вы не можете

String[] s;
s={"FOO", "BAR"};  

Ответ 2

Потому что Type[] x = { ... } является синтаксисом инициализации для массивов. { ... } интерпретируется определенным образом только в этом конкретном контексте.

Ответ 3

Если вам нужен простой способ передать массив String, я предлагаю вам использовать varargs

class Test {
   public Test(String...args);
}

// same as new Test(new String[] { "test", "one" })
Test t = new Test("test", "one");