Passare direttamente un inizializzatore di array a un parametro del metodo non funziona

package arraypkg; import java.util.Arrays; public class Main { private static void foo(Object o[]) { System.out.printf("%s", Arrays.toString(o)); } public static void main(String[] args) { Object []o=new Object[]{1,2,3,4,5}; foo(o); //Passing an array of objects to the foo() method. foo(new Object[]{6,7,8,9}); //This is valid as obvious. Object[] o1 = {1, 2}; //This is also fine. foo(o1); foo({1,2}); //This looks something similar to the preceding one. This is however wrong and doesn't compile - not a statement. } } 

Nello snippet di codice precedente tutte le espressioni tranne l’ultima sono compilate e funzionano bene. Sebbene l’ultima affermazione che assomiglia a qualcosa di simile alla sua affermazione immediata, il compilatore emette un errore in fase di compilazione – l’inizio di espressione illegale – non un’istruzione. Perché?

 foo({1,2}); 

{1, 2} questo tipo di inizializzazione dell’array funziona solo nel punto in cui si sta dichiarando un array. In altri punti, è necessario crearlo utilizzando una new parola chiave ..

È per questo: –

 Object[] obj = {1, 2}; 

Va bene .. Questo perché, il tipo di array, è implicito dal tipo di reference che usiamo su LHS .. Ma, mentre lo usiamo da qualche altra parte, il compilatore non può scoprire il tipo (come nel tuo caso) ..

Prova a usare: –

  foo(new Object[]{1,2}); 

foo({1,2}); non dice che tipo di array è. Quindi, il compilatore non riesce a capire la syntax. Tutte le altre dichiarazioni specificano il tipo di array.

foo({1,2}); NON è una matrice.

E siccome il tuo metodo foo() accetta un parametro di tipo array , questo fallisce.