2011-09-10 11 views
10

que tienen un método como:Tipo de devolución vararg?

void foo(int x, Grok... groks); 

No hay manera de definir un método que devuelve un tipo de varargs, ¿verdad? Idealmente quiero un método util adicional:

foo(25, new Grok(), new Grok(), generateMoreGroks()); 

public Grok... generateMoreGroks() { 
    return new Grok[] { 
     new Grok(), new Grok(), new Grok() }; 
} 

¿verdad?

---- Más información --------------

El problema con lo anterior es que no podemos mezclar algunos casos Grok asignados allí con una gran variedad de asimila:

"new Grok(), new Grok(), generateMoreGroks());" 

y no creo que eso es legal, a menos que se podría definir un método para devolver un tipo de vararg (supongo).

Gracias

Respuesta

8

que puede hacer,

Grok[] generateMoreGroks() { 

Si un método toma un parámetro varargs, es lo mismo que tomar una matriz.

Ahora tiene que sobrecargar foo para permitir que se tome algunos casos Grok, y el resto como varargs,

foo(int x, Grok... rest) 
foo(int x, Grok g1, Grok... rest) 
foo(int x, Grok g1, Grok g2, Grok... rest) 
foo(int x, Grok g1, Grok g2, Grok g3, Grok... rest) 

Cuando los métodos foo son como,

foo(int x, Grok g1, Grok... rest) { 
    Grok[] groks = new Grok[rest.length + 1]; 
    groks[0] = g1; 
    System.arrayCopy(rest, 0, groks, 1, rest.length); 
    foo(x, groks); 
} 

Esto es un poco fea .

+2

Hola, sí, pero no puedo mezclar una matriz con algunas instancias de Grok en el parámetro varargs (como en la llamada a foo() anterior). Solo puedo suministrar una matriz o instancias individuales de Grok. ¿Pero no ambos? – user291701

+0

@ user291701 - Eso es correcto. –

+0

editado para mostrar cómo hacerlo, pero se pone feo – sbridges

4

No, no hay ... pero cambie la firma de la función y eso funcionará muy bien.

public Grok[] generateMoreGroks() { 
    return new Grok[] { 
     new Grok(), new Grok(), new Grok() }; 
} 
+0

Derecha, pero no puedo mezclar algunas 'nuevas instancias de Grok()' con la matriz devuelta por generateMoreGroks() en la llamada a foo(). – user291701

Cuestiones relacionadas