2012-07-04 9 views

risposta

20

Perché la sintassi { myObject } è special syntactic sugar che si applica solo quando si inizializza una variabile di matrice. Questo perché di per sé il compito manca di informazioni sul tipo; ma nel caso particolare del compito il tipo è completamente dedotto dalla variabile.

Nel primo esempio, il compilatore sa che stai assegnando a a (che è un Object[]), quindi questa sintassi è consentita. In quest'ultimo caso non si inizializza una variabile (e a causa di una debolezza dell'inferenza di tipo di Java, non sarà nemmeno possibile elaborare completamente il contesto dell'assegnazione dei parametri). Quindi non saprebbe quale tipo dovrebbe essere la matrice, anche se potrebbe determinare inequivocabilmente che è quello che stai cercando di fare (a differenza, ad esempio, della dichiarazione di un blocco).

Calling

someMethod (new Object[] { myObject }) 

avrebbe funzionato se si desidera definire la matrice sul posto senza l'utilizzo di una variabile.


Mentre quanto sopra risponde alla tua domanda come richiesto, ho notato che il metodo si sta chiamando è varargs anziché richiedere esplicitamente un paramter array. Quindi in questo caso puoi semplicemente chiamare

someMethod(myObject); 
+0

Bello, chiaro, non troppo lungo, ottiene il lavoro svolto. +1 –

6
someMethod(new Object[] { "" }); 

Dovrebbe fare il trucco!

Problemi correlati