2010-04-14 15 views
19

Tengo una función que acepta un número variable de parámetros:función de Java variadic parámetros

foo (Class... types); 

En qué puedo obtener un cierto número de tipos de clase. A continuación, quiero tener una función

bar(??) 

que Will acepta un número variable de parámetros, así, y ser capaz de verificar que las variables son el mismo número (que es fácil) y de los mismos tipos (el disco parte) como se especificó en foo.

¿Cómo puedo hacer eso?

Editar: para aclarar, una llamada puede ser:

foo (String.class, Int.class); 
bar ("aaa", 32); // OK! 
bar (3); // ERROR! 
bar ("aa" , "bb"); //ERROR! 

Además, foo y bar son métodos de la misma clase.

+0

No entendí su requisito. ¿A qué te refieres con 'el mismo número que se especificó en foo'? No hay tal número. Cada llamada a foo puede tener diferentes números de argumentos. – duduamar

+0

La documentación de Oracle describe parámetros arbitrarios como "varargs": http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html. Básicamente solo una matriz, como lo es en ruby ​​y otros lenguajes de programación. – JohnMerlino

Respuesta

33

Algo como esto:

private Class<?>[] types; 

public void foo(Class<?>... types) 
{ 
    this.types = types; 
} 

public boolean bar(Object... values) 
{ 
    if (values.length != types.length) 
    { 
     System.out.println("Wrong length"); 
     return false; 
    } 
    for (int i = 0; i < values.length; i++) 
    { 
     if (!types[i].isInstance(values[i])) 
     { 
      System.out.println("Incorrect value at index " + i); 
      return false; 
     } 
    } 
    return true; 
} 

Por ejemplo:

test.foo(String.class, Integer.class); 
test.bar("Hello", 10); // Returns true 
test.bar("Hello", "there"); // Returns false 
test.bar("Hello"); // Returns false 

(Obviamente usted querrá cambiar cómo se informa de los resultados ... posiblemente usando una excepción para los datos no válidos).

Cuestiones relacionadas