java - para - manual de programacion android pdf
Qué es... en una firma de método (6)
El ...
indica una lista de parámetros de longitud variable.
printStrings(String... s){
//internally s is an array with the parameters
for(int i = 0; i < s.length;++i)
System.out.print(s[i]);
}
printStrings("A","B","C","D");
//this is done by the compiler
printStrings(new String[]{"A","B","C","D"});
Lo he visto por primera vez ...
en una firma de método.
Traté de acceder a un archivo .class. Tiene un método definido a continuación
public void addGraphData(GraphData... _graphData) {
}
Y que GraphData no es más que POJO con getters y setters. ¿Por qué el archivo .class muestra GraphData... _graphData
lugar de GraphData _graphData
?
Es varargs y solo se puede usar por última vez en una lista de parámetros. El último parámetro puede contener más de un objeto.
public class C {
int i;
String[] s;
public C(int i, String... s){
this.i = i;
this.s=s;
}
}
new C(4,"a","b") // will be transformed to int and String[]
Vea cómo "a" y "b" se han transformado en una matriz.
Esa es la sintaxis varargs: http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
Se trata como un GraphData [] que se puede construir sobre la marcha como parámetros extensibles. Arrays.asList () es otro ejemplo.
Este sinónimo de notación para
public void addGraphData (GraphData [] _graphData) {
}
La función se llama Varargs
Le permite suministrar una cantidad aleatoria de argumentos a un método.
...
indica varargs
en Java. El atributo [vararg]
especifica que el método toma una cantidad variable de parámetros. Para lograr esto, el último parámetro debe ser una matriz segura de tipo VARIANT que contiene todos los parámetros restantes:
[vararg [, optional-attributes]] return-type function-name(
[optional-param-attributes] param-list,
SAFEARRAY(VARIANT) last-param-name);
La sintaxis varargs básicamente le permite especificar que hay posibles parámetros, ¿verdad? Ellos pueden estar allí, o no pueden estar allí. Ese es el propósito de los tres puntos. Cuando llama al método, puede llamarlo con o sin esos parámetros. Esto se hizo para evitar tener que pasar matrices a los métodos.
Echa un vistazo a esto :
Ver ¿ Cuándo utilizas varargs en Java?
final public class Main
{
private void show(int []a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+"/t");
}
}
private void show(Object...a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+"/t");
}
System.out.println("/nvarargs called");
}
public static void main(String... args) //See also here.
{
int[]temp=new int[]{1,2,3,4};
Main main=new Main();
main.show(temp);
main.show(); //<-- This is possible.
}
}
Es por esta razón, varargs
básicamente no se recomienda en la sobrecarga de métodos.
System.out.printf();
es un ejemplo de varargs
y se define de la siguiente manera.
public PrintStream printf(String format, Object ... args)
{
return format(format, args);
}
formato - Una cadena de formato como se describe en Sintaxis de cadena de formato
args - Argumentos referenciados por los especificadores de formato en la cadena de formato. Si hay más argumentos que especificadores de formato, los argumentos adicionales se ignoran. La cantidad de argumentos es variable y puede ser cero. El número máximo de argumentos está limitado por la dimensión máxima de una matriz de Java, tal como se define en la Especificación de máquina virtual de Java. El comportamiento en un argumento nulo depende de la conversión.