2011-03-23 15 views
41

Questo è il mio codice di esempio in cui sto ricevendo l'avviso.Ho ricevuto questo avviso: chiamata non varargs del metodo varargs con tipo di argomento inesatto per l'ultimo parametro;

Class aClass = Class.forName(impl); 
Method method = aClass.getMethod("getInstance", null); 
item = (PreferenceItem) method.invoke(null, null); 

L'avvertimento:

avvertimento: chiamata non varargs del metodo varargs con inesatta tipo di argomento per ultimo parametro; cast a java.lang.Class per una chiamata varargs cast a java.lang.Class [] per una chiamata non varargs e per sopprimere questo avviso metodo method = aClass.getMethod ("getInstance", null);

si prega di aiutarmi a risolvere questo problema

risposta

66

Ebbene, l'avvertimento del compilatore ti dice tutto quello che c'è da sapere. Non sa se trattare null come Class<?>[] per passare direttamente a getMethod o come singola voce null in un nuovo array Class<?>[]. Ho il sospetto che si desidera che il comportamento precedente, in modo da lanciare l'null a Class<?>[]:

Method method = aClass.getMethod("getInstance", (Class<?>[]) null); 

Se si voleva creare un Class<?>[] con un unico elemento null, che ci si lanci a Class<?>:

Method method = aClass.getMethod("getInstance", (Class<?>) null); 

In alternativa puoi rimuovere completamente l'argomento e lasciare che il compilatore costruisca un array vuoto:

Method method = aClass.getMethod("getInstance"); 
+0

Grazie Jon che l'avviso ha ape n goon ............ Ho appena cambiato il mio codice come suggerisci aClass.getMethod ("getInstance"); – Mohsin

+0

Se qualcuno si chiedesse (come me), sembra che il valore predefinito sia null come l'intero array 'Classe []', non un singolo elemento nullo all'interno di un array (almeno in base alle risposte pubblicate qui: http: // stackoverflow.com/questions/4028059/calling-java-varargs-method-with-single-null-argument). Ovviamente, è probabilmente una buona pratica lanciare per la specificità, ma è bene sapere quando si valuta se i metodi di refactoring devono essere considerati come l'ultimo argomento in varargs. –

+0

Dove nel JLS è la logica per il fatto che in questo esempio un cast a 'Classe ' produrrebbe una matrice con un singolo elemento 'null' ?. –

Problemi correlati