2010-08-26 19 views

Respuesta

4

Claro, usted debería ser capaz de hacer precisamente que el uso de vararg-methods. Si usted está preocupado acerca de las ambigüedades cuando se trata de argumentos tales como Object... este pedazo de código debe aclarar:

public class Test { 

    public static void varargMethod(Object... args) { 
     System.out.println("Arguments:"); 
     for (Object s : args) System.out.println(s); 
    } 

    public static void main(String[] args) throws Exception { 
     varargMethod("Hello", "World", "!"); 

     String[] someArgs = { "Lorem", "ipsum", "dolor", "sit" }; 

     // Eclipse warns: 
     // The argument of type String[] should explicitly be cast to Object[] 
     // for the invocation of the varargs method varargMethod(Object...) 
     // from type Test. It could alternatively be cast to Object for a 
     // varargs invocation 
     varargMethod(someArgs); 

     // Calls the vararg method with multiple arguments 
     // (the objects in the array). 
     varargMethod((Object[]) someArgs); 

     // Calls the vararg method with a single argument (the object array) 
     varargMethod((Object) someArgs); 
    } 
} 

Salida:

Arguments: 
    Hello 
    World 
    ! 
Arguments: 
    Lorem 
    ipsum 
    dolor 
    sit 
Arguments: 
    Lorem 
    ipsum 
    dolor 
    sit 
Arguments: 
    [Ljava.lang.String;@1d9f953d 

Usted no puede hacerlo para un método no vararg. Sin embargo, un método no vararg tiene un número fijo de argumentos, por lo que debe ser capaz de hacer

nonVarargMethod(args[0], args[1], args[2]); 

Más aún, no hay manera de que el compilador resolver la situación de los métodos sobrecargados basadas en el tamaño o tipo de la matriz.

1

Hay dos vías para utilizar varargs en Java

public static void main(String... args) 

O

En mi ejemplo es con una cuerda, pero se puede hacer con int también.

llamarlos (esto funciona en ambos),

main("hello", "world"); 

o

main(new String[]{"hello", "world"}); 
+0

Esto no puede ser en realidad lo que el PO está pidiendo - parece como si estuvieran preguntando si pueden pasar una matriz de argumentos a una función no vararg. – Amber

+0

De hecho, es lo opuesto a varargs. El OP quiere llamar a un método que no sea de argumento de matriz con una matriz como argumento. – gustafc

+0

Ah, me acabo de dar cuenta que las matrices no son objetos en Java, por lo que no hay ambigüedad si se pasa un solo argumento. ¡Gracias! :) – mik01aj

4

Un método se puede declarar con un parámetro varargs e invocar con una matriz, como lo sugieren otras respuestas.

Si el método que desea invocar no tiene un parámetro varargs, se puede hacer algo como esto con la introspección, aunque es un poco torpe:

class MyClass { 
    public void myMethod(int arg1, String arg2, Object arg3) { 
    // ...code goes here... 
    } 
} 

Class<MyClass> clazz = MyClass.class; 
Method method = clazz.getMethod("myMethod", Integer.TYPE, String.class, Object.class); 

MyClass instance = new MyClass(); 
Object[] args = { Integer.valueOf(42), "Hello World", new AnyObjectYouLike() }; 
method.invoke(instance, args); 
0

Aquí hemos pasado arguemnts al método en el llamada al método, véase el siguiente ejemplo,

check the source

Descripción para el ejemplo es a continuación;

Tenemos una variable int con valor 10, es una variable local de método. Luego llamamos a nuestro método m (int x) dentro de la declaración de impresión. luego, en m (int x) hay un parámetro int x variable, esta x es también una variable local de método. Puedes acceder a él solo dentro de este método. Luego, dentro del método, imprime el valor de x, que es 10, porque en el método call se pasa un argumento y, que contiene el valor 10. ese valor 10 se asigna a la variable local del método x del método, que se declara dentro del parámetro del método.Ahora, cuando nosotros llamamos a imprimir se imprimirá x 10.

A continuación, crear otra variable local método y añadir valor al valor de x y asignar y devuelve esa variable. Va a devolver un valor, por lo que ahora se va a comprobar que el método no es nula, y tiene int tipo de retorno, desde el 10 en un int.

Debido a que su método está escrito en el interior sentencia print. su valor de retorno también se imprime en este programa. Así que abajo está el código.

class A 
{ 
    static int m(int x) 
    { 
      System.out.println("x : "+x); 
      int a= x+10; 
      System.out.println("a : "+a); 
      return a; 
    } 


    public static void main(String args[]) 
    { 
     int y=10; 
     System.out.println(m(y)); 
    } 
} 

Salida:

x : 10 
a: 20 
20 
Cuestiones relacionadas