2010-12-14 19 views
29

En Java, es completamente legal para inicializar una matriz de cadenas de la siguiente manera:Array cadena de inicialización como parámetro constructor

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

Sin embargo, cuando se trata de crear una instancia de una clase que tiene una matriz de cadena como parámetro, el siguiente fragmento de código NO está permitido:

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

Pero esto funciona de nuevo:

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

¿Alguien puede explicar por qué es esto?

Respuesta

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

Esto está permitido en el momento de la declaración única

No se puede

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

Debido a que es un Type[] x = { ... } sintaxis inicialización para las matrices. El { ... } se interpreta de una manera específica solo en ese contexto específico.

3

Por desea una forma sencilla de pasar una matriz de cadenas, le sugiero que utilice varargs

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

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

Gracias, pero eso no era realmente la pregunta y también suponemos que podemos modificar el constructor. –

+1

@Herminator Usualmente puedes, pero no siempre. La próxima vez que pueda sabrá lo que puede hacer. –

Cuestiones relacionadas