2010-12-14 2 views
29

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

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

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

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

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

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

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

ответ

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

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

Вы не можете

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

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

3

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

переменной длины
class Test { 
    public Test(String...args); 
} 

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

Спасибо, но это было на самом деле не вопрос, и вы также предполагая, что мы можем изменить конструктор. –

+1

@Herminator Обычно вы можете, но не всегда. В следующий раз вы сможете узнать, что вы можете сделать. –

Смежные вопросы