2013-03-19 11 views
6

Date le variabili:Come rendere un metodo variatic prendere un singolo array come primo valore dell'array varargs?

Object[] ab = new Object[] { "a", "b" }; 
Object[] cd = new Object[] { "c", "d" }; 

Quando si chiama il seguente metodo:

public static void m(Object... objects) { 
    System.out.println(Arrays.asList(objects)); 
} 

Usando:

m(ab, cd); 

ottengo i risultati attesi:

[[Ljava.lang.Object;@3e25a5, [Ljava.lang.Object;@19821f] 

Ma quando si utilizza:

m(ab); 

ottengo:

[a, b] 

Dato strings <- ab e non strings[0] <- ab.

Come posso forza al compilatore di prendere la matrice ab come primo valore della matrice strings, e quindi avere l'output:

[Ljava.lang.Object;@3e25a5 

?

+0

Un sovraccarico che accetta 'Oggetto []' e lo passa in 'm' potrebbe essere una soluzione qui. –

+1

@defaultlocale Non è possibile rappresentare tale sovraccarico a livello di bytecode poiché risulterebbe in una firma duplicata. –

+0

@MarkoTopolnik ringrazia per averlo indicato. Non avevo un compilatore a mano, quindi, un commento stupido. –

risposta

9

Typecast mentre passa e si ottiene ciò che si vuole -

m((Object)ab); 
+1

Ottimo, bel suggerimento. – bsiamionau

3

parte come suggerito da @Sudhansu. Puoi definire le variabili come di seguito in modo da non doverti preoccupare di lanciare la chiamata al metodo quando passi un singolo array.

Object ab = new Object[] { "a", "b" }; 
Object cd = new Object[] { "c", "d" }; 
Problemi correlati