No entiendo esa sintaxis. Tratar de googlear varias palabras más "..." es inútil.¿Qué significa "..." en una lista de parámetros? doInBackground (String ... params)
Respuesta
Esto se llama Variadic function (página wiki con ejemplos en muchos languges).
En la programación informática, una función variadic es una función de indefinida aridad, es decir, uno que acepta un número variable de argumentos. Soporte para funciones variadic difiere ampliamente entre los lenguajes de programación. Hay muchas operaciones matemáticas y lógicas que se encuentran naturalmente como funciones variadas. Por ejemplo, la suma de números o la concatenación de cadenas u otras secuencias son operaciones que pueden aplicarse lógicamente a cualquier número de operandos . Se ha implementado otra operación que tiene como una función variad en muchos idiomas con formato de salida . La función C printf y el formato de función Common Lisp son dos de estos ejemplos. Ambos toman un argumento que especifica el formato de la salida, y se formatea cualquier número de argumentos que proporcionan los valores a . Las funciones variables pueden exponer problemas de seguridad tipo en algunos idiomas . Por ejemplo, printf de C, si se usa de forma incauta, puede dar lugar a una clase de agujeros de seguridad conocidos como ataques de cadena de formato .El ataque es posible porque el soporte de idioma para funciones variadic no es type-safe; permite que la función intente extraer más argumentos de la pila que se colocaron allí - corrompiendo la pila y dando lugar a un comportamiento inesperado . Variadic funcionalidad puede considerarse complementaria a la función de aplicar, que tiene una función y una lista/secuencia/matriz como argumentos y entonces llama a la función una vez, con los argumentos siendo los elementos de la lista .
Una de mayo favorito personal características que no se utilizan en Java. Básicamente es una matriz de referencia construida a partir de elementos. Una de las mejores formas de usarlo es en el constructor de clase, o método en el que necesita encontrar constantemente un valor como máximo de 2, 3, 4, 5 elementos de entrada.
Un ejemplo es cuando construí un genérico binary tree node
, para tareas de codificación, lo usé en el constructor. Esto me permitió simplemente agregar elementos al árbol y distribuirlos.
A continuación se crea el tipo de árbol binario de tipo cadena, con raíz "Red"
y 2 ramas "Blue"
y "Green"
.
new MBTN<String>("Red", "Blue", "Green").
¿Podrían pensar cuáles serían las alternativas? D Ni siquiera puede hacer simplemente un conjunto genérico de elementos, por lo que esto se extendería como el infierno. Definitivamente no es inútil.
Gracias a todos. Entiendo perfectamente. Supongo que sin saber esto, solo habría usado un String [] en su lugar. Pero ahora puedo leer el código que otros escriben. – Jim
"No se puede simplemente hacer una matriz genérica de elementos" Luego recibirá una advertencia al usar varargs de esta manera, porque también intentará crear una matriz genérica detrás de las escenas, pero no puede – newacct
Debo mencionar, ese ** nuevo MBTN
Se llama varargs. Este hecho debería producir better Google results.
No es tan fácil de buscar si no sabes cómo se llama ... –
@Carlos: uhm, es exactamente por eso que respondí cómo se llama. – BalusC
Es un método Java que tuvo un número variable de parámetros arbitrarios
Son parámetros de longitud variable.
Aquí es un enlace con un example.
Como se mencionó @BalusC, que es un parámetro varags. Esto significa que puede pasar una cantidad variable de argumentos a ese método.
Así, por un método definido como
public void foo(String...strings) { }
Las siguientes invocaciones son legales:
foo();
foo("one param");
foo("one", "two", "three");
significa "número arbitrario de argumentos" que significa que puede pasar un número indeterminado de parámetros en el método ..
ver
http://download.oracle.com/javase/tutorial/java/javaOO/arguments.html Busque el "número arbitrario de argumentos" sección
public Polygon polygonFrom(Point... corners) {
int numberOfSides = corners.length;
double squareOfSide1, lengthOfSide1;
squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x)
+ (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ;
lengthOfSide1 = Math.sqrt(squareOfSide1);
// more method body code follows that creates
// and returns a polygon connecting the Points
}
Como se ha mencionado por todo el mundo ... argumentos variable (o varargs) le permite hacer esto ....
//Method we're using for varargs
public void doSomething(String... datas) {
if (datas == null || datas.length == 0) {
System.out.println("We got nothing");
} else {
for (String data: datas) {
System.out.println(data);
}
}
}
Por lo tanto, todas estas llamadas se mencionan a continuación son válidos ....
String d[] = {"1", "2", "3"};
doSomething(d); //An array of String, as long as the type is exactly as the varargs type.
//OR
doSomething("1", "2", "3", "4"); //I can add "infinitely" many arguments as the JVM can allocate me....
//OR
doSomething("1"); //Exactly 1;
Internally varargs es "esencialmente" una matriz de referencia de su tipo declarado.
Son los "argumentos variables" o varargs (para abreviar).
Básicamente se permite el paso de un número indeterminado de cadenas, por lo que la firma del método
public void printStuff(String...messages)
efectivamente puede manejar las llamadas siguientes
printStuff("hi");
printStuff("hi", "bye");
printStuff("Hello", "How are you?", "I'm doing fine.", "See you later");
se puede considerar la eficacia de este tipo de autoboxing. El argumento printStuff
se puede ver como una matriz, por lo que printStuff(String...messages)
se maneja conceptualmente como printStuff(String[] messages)
. Satisfechas con las llamadas que actúa por encima de eficacia como
printStuff(new String[] {"hi"});
printStuff(new String[] {"hi", "bye"});
printStuff(new String[] {"Hello", "How are you?", "I'm doing fine.", "See you later"});
Para acceder a los mensajes internos, se utiliza List
primitivas típicas de manipulación.Algo así como
...
if (messages != null) {
for (String message : messages) {
System.out.println(message);
}
}
...
Que no hay necesidad de crear matrices en realidad es un poco de azúcar sintáctico añadido a Java con el advenimiento de boxeo de automóviles.
Hola, estoy pasando solo un parámetro, cómo acceder a ese. –
@Sridhar Al pasar solo un parámetro, se convierte en el primer (y único) elemento de la matriz. –
Gracias por responder lo tengo. podemos obtener el primer argumento como mensajes [0]. –
- 1. de AsyncTask doInBackground (Parámetros ... params)
- 2. Parámetros de asInncTask doInBackground frente a los parámetros del constructor
- 3. ¿Qué significa [String] en VB.NET?
- 4. ¿Qué significa string :: npos
- 5. ¿Qué significa array * string en Ruby?
- 6. ¿Qué significa el objeto <String> en Java?
- 7. ¿Qué significa el Diccionario <string, />?
- 8. ¿Qué significa [...] (una elipsis) en una lista en Python?
- 9. ¿Qué significa la sintaxis "final String ... args" mean/do?
- 10. ¿Qué significan los tres puntos en "doInBackground (URL ... urls)"?
- 11. ¿Qué significa "|" significa en una línea de comando terminal?
- 12. ¿Qué significa '??' significa en C#?
- 13. ¿Qué es la lista [String ~ Int]?
- 14. ordenar una lista de Mapa <String, String>
- 15. Uso FlurryAgent.onEvent (String EVENTID, mapa <String, String> Parámetros)
- 16. ¿Qué significa: = mean en vb.net?
- 17. C#: Convertir una colección en params []
- 18. múltiples parámetros en la lista
- 19. ¿Qué significa @ "../ .." en una ruta?
- 20. AsyncTask doInBackground no se ejecuta
- 21. ¿Qué significa * (estrella) en Ruby?
- 22. ¿Qué significa "lista oculta" en la salida de `str()`?
- 23. ¿Por qué String es una clase?
- 24. ¿qué significa "$ &" significa en Ruby
- 25. ¿Qué significa [,] en C#?
- 26. ¿Qué significa "?" significa en Java?
- 27. Solicitud params y phpdoc
- 28. ¿Qué significa @param en una clase?
- 29. ¿Qué significa "&" en C++?
- 30. ¿Qué significa :: en C++?
Posible duplicado de [Java, 3 puntos en los parámetros] (http://stackoverflow.com/questions/3158730/java-3-dots-in-parameters) – Raedwald