Estoy tratando de llamar String.format()
teniendo un String
y Object[]
. ¿Cómo puedo hacerlo?¿Cómo llamar a un método "vararg" con una matriz de params?
Respuesta
simplemente así:
String.format(myString, myArray);
Esto no parece funcionar para otros métodos vararg en Java 1.8. – IARI
sólo debe ser capaz de llamar
String text = String.format(formatString, args);
... suponiendo que desea que el args
a ser los valores múltiples. Si necesita envoltura adicional, usted tiene que hacerlo usted mismo:
String text = String.format(formatString, new Object[] { args });
Básicamente, si el tipo de argumento que ya coincide con el parámetro tipo de matriz, el compilador no hace ningún envoltorio.
Desde el JLS, sección 15.12.4.2:
Si m se invoca con expresiones argumento real kn, o, si m está siendo invocado con k = n expresiones argumento actual y el tipo de la expresión argumento k-ésimo no es la asignación compatible con T [], entonces la lista de argumentos (e1, ..., en-1, en, ... ek) se evalúa como si estuviera escrita como (e1, ..., en-1, nueva T [] {en, ..., ek}).
Tenga en cuenta el "Si" al principio - eso es lo que efectivamente dice que si el argumento ya está bien, no se realiza ningún ajuste.
en definitiva por ejemplo: (S2 y I2 son probablemente las versiones más interesantes que pasan la varargs como 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 ) ;
salidas:
## 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. Cómo llamar al método vararg Java desde C con valist
- 2. ¿Cómo llamar funciones desde un parámetro vararg?
- 3. ¿Qué hace: _ * al llamar a un método Vararg de Java desde Scala?
- 4. ¿Cómo paso una ArrayList a un método que espera un vararg (Object ...)?
- 5. ¿Por qué pasar null a un método params da como resultado una matriz de parámetro nulo?
- 6. Método de instalación con Params Array
- 7. cómo pasar una scala vararg String * a un método Java utilizando Scala 2,8
- 8. Llamar a un método genérico con un método genérico
- 9. Llamando al método Java vararg de Scala con primitivas
- 10. Llamar a un método en un modelo de controlador
- 11. ¿Cómo llamar a un método de una clase?
- 12. Llamar a un método NSTimer
- 13. ¿Cómo llamar a un método en Java?
- 14. ¿Debo llamar a ReleaseIntArrayElements en una matriz creada con NewIntArray?
- 15. ¿Es posible explotar una matriz para que sus elementos se puedan pasar a un método con la palabra clave params?
- 16. Cómo prohibir llamar a un método C#
- 17. ¿Llamar a una función dentro de un método de clase?
- 18. Llamar a un método obj-c con un parámetro
- 19. ¿Cómo llamar a un elemento en una matriz numpy?
- 20. Tipo de devolución vararg?
- 21. Cómo llamar a un método en un objeto de javascript
- 22. Llamar a un método de clase dentro de una clase
- 23. Cómo pasar un solo objeto [] a un objeto params []
- 24. Llamar a un método asíncrono de un método no asíncrono
- 25. Llamar a un método de fragmento desde una actividad primaria
- 26. llamar a un método estático dentro de una clase?
- 27. Llamar a un método anulado, superclase a llamadas reemplazadas método
- 28. ¿Cómo forzar el uso del método de extensión en lugar del método de instancia con params?
- 29. Llamar a un método en un modelo desde una plantilla
- 30. Llamar a un método de una plantilla Ir
¿Cómo estás "intentando" exactamente? Y que esta pasando? –