Sto provando a chiamare String.format()
con uno String
e Object[]
. Come posso farlo?Come chiamare un metodo "vararg" con una serie di parametri?
risposta
Semplicemente così:
String.format(myString, myArray);
Questo non sembra funzionare per me per altri metodi vararg in java 1.8. – IARI
si dovrebbe solo essere in grado di chiamare
String text = String.format(formatString, args);
... supponendo che si desidera la args
di essere i più valori. Se avete bisogno di avvolgimento in più, dovete farlo da soli:
String text = String.format(formatString, new Object[] { args });
In sostanza, se il tipo di argomento corrisponda già il tipo di matrice di parametri, il compilatore non fa alcun involucro.
Dalla JLS, sezione 15.12.4.2:
Se m viene richiamato con kn espressioni argomento effettivo, o, se m viene richiamato con k = n espressioni argomento effettivo e il tipo dell'espressione argomento kth non è un compito compatibile con T [], quindi la lista degli argomenti (e1, ..., en-1, en, ... ek) viene valutata come se fosse scritta come (e1, ..., en-1, nuovo T [] {en, ..., ek}).
Nota "Se" all'inizio - questo è ciò che effettivamente dice che se l'argomento è già a posto, non viene eseguito alcun ritorno.
in breve l'esempio: (S2 e I2 sono probabilmente le versioni più interessanti passano la varargs come un Object[]
)
PrintStream ps = System.out ;
String[] sarr = new String[] { "a" , "b" } ;
Object os = sarr ;
int[] iarr = new int[] { 1 , 2 } ; // cannot be cast to Object[] - see I6 below
Integer[] ioarr = new Integer[] { 1 , 2 } ; // can be cast to Object[] - see I2 below
Object oi = iarr ; // cannot be cast to Object[] - see I6 below
ps.printf("%n## Strings:%n%n") ;
ps.printf("S1: pass as single objects: %s, %s%n" , "a" , "b") ;
ps.printf("S2: pass as varargs objects: %s, %s%n" , (Object[]) sarr ) ;
ps.printf("S3: pass as single objects: %s, %s%n" , sarr , "c") ;
ps.printf("S4: pass as single objects: %s, %s%n" , os , "c") ;
// ps.printf("S5: MissingFormatArgumentException: %s, %s%n" , os ) ;
// ps.printf("S6: ClassCastException: %s, %s%n" , (Object[]) os ) ;
ps.printf("%n## int:%n%n") ;
ps.printf("I1: pass as single objects: %s, %s%n" , 1 , 2) ;
ps.printf("I2: pass as varargs objects: %s, %s%n" , (Object[]) ioarr) ;
ps.printf("I3: pass as single objects: %s, %s%n" , iarr , 3) ;
ps.printf("I4: pass as single objects: %s, %s%n" , oi , 3) ;
// ps.printf("I5: MissingFormatArgumentException %s, %s%n" , iarr ) ;
// ps.printf("I6: ClassCastException: %s, %s%n" , (Object[]) oi ) ;
uscite:
## Strings:
S1: pass as single objects: a, b
S2: pass as varargs objects: a, b
S3: pass as single objects: [Ljava.lang.String;@ad02649, c
S4: pass as single objects: [Ljava.lang.String;@ad02649, c
## int:
I1: pass as single objects: 1, 2
I2: pass as varargs objects: 1, 2
I3: pass as single objects: [[email protected], 3
I4: pass as single objects: [[email protected], 3
- 1. Come chiamare il metodo vararg Java da C con valist
- 2. Come chiamare un metodo di una classe?
- 3. Vararg con parametri null in Java
- 4. È consigliabile chiamare un metodo sovraccarico con parametri null?
- 5. Come chiamare Run() con parametri
- 6. Tipo di ritorno vararg?
- 7. come chiamare un metodo di più argomenti con ritardo
- 8. Come chiamare un metodo tratto con alias
- 9. Chiamare il metodo varargs Java con un argomento null singolo?
- 10. Come chiamare un metodo con una discussione separata in Java?
- 11. Come avvolgere una serie di chiamate asincrone con un metodo sincrono con un valore di ritorno
- 12. bug con vararg e sovraccarico?
- 13. Come posso passare un ArrayList ad un metodo che prevede un vararg (Object ...)?
- 14. Chiamare un servizio RESTful con * molti * parametri
- 15. Come documentare un metodo con i parametri?
- 16. Come chiamare un metodo con i parametri di output in PowerShell?
- 17. Come posso passare un array come parametri ad una funzione vararg?
- 18. Chiamare un costruttore con parametri da XAML
- 19. Come passare l'array Scala nel metodo Scala vararg?
- 20. Come chiamare un metodo che richiede più parametri in una discussione?
- 21. Spark UDF con vararg
- 22. Come chiamare un metodo privato dall'esterno di una classe java
- 23. Chiamata metodo Java vararg da Scala con primitive
- 24. Come chiamare un metodo di servizio Web?
- 25. come passare una stringa * scala vararg a un metodo Java utilizzando Scala 2.8
- 26. Metodo di rompere una lunga serie frase
- 27. Chiamare un metodo NSTimer
- 28. Chiamare dinamicamente una dll e un metodo con argomenti
- 29. Chiamare un metodo come un metodo di estensione richiede più di riferimento che chiamare direttamente
- 30. Come chiamare un metodo implicitamente dopo ogni chiamata di metodo?
Come stai "provando" esattamente? E cosa sta succedendo? –