2010-11-08 24 views
19

Estoy tratando de llamar al método principal de una clase desde otro método pasando argumentos como cuando se ejecuta la clase desde la línea de comando. ¿Hay alguna forma de hacer esto?¿Es posible llamar al método principal pasando args [] desde otro método?

+4

¿Qué pasó cuando lo intentó? – EJP

+0

@EJP - no pudimos estar más de acuerdo con usted. Esta pregunta podría haberse revisado trivialmente (probablemente más rápido que publicar la pregunta). –

+0

Mucho más rápido que publicar la pregunta, y órdenes de magnitudes más rápido que esperar la respuesta ... que podría * nunca * llegar. – EJP

Respuesta

0

Podrías simplemente cambiar el nombre de tu principal y crear una nueva, haciendo que se llame "principal". Al menos eso es lo que generalmente hago cuando pruebo la unidad

+3

la prueba de la unidad NO debe requerir que cambie sus métodos, esta es una muy mala manera de hacer las cosas –

+1

No lo dejé claro pero casi nunca tengo una fuente principal que hace más que analizar argumentos y pasarlos a otra cosa , porque un principal torpe es solo una mala idea. Además, cambiar el código para las pruebas no es una buena idea, sin embargo, primero debes escribir el código comprobable – juhanic

12

Sí, el método principal se puede llamar como cualquier otro método, entonces si tienes una prueba de clase con un método principal, puedes llamarlo desde cualquier otra clase como:

Test.main(new String[] { "a", "b" }); 

y de esta manera pasará "a" y "b" como parámetros.

+0

gracias, está funcionando – abcdefg

5

Ha intentado algo así como:

// In your method 
String[] yourArgs = new String[] {"foo", "baz", "bar"}; 
YourClassWithMain.main(yourArgs); 

pero creo que esto no es una buena idea, el método main() sólo debe contener un código muy básico que llama al constructor. No debe llamarlo directamente, sino crear una nueva instancia de su otra clase que hará toda la inicialización necesaria.

21

puede llamar al método main como se puede llamar a cualquier otro método (estática):

MyClass.main(new String[] {"arg1", "arg2", "arg3"}); 

Ejemplo:

class MyClass { 
    public static void test() { 
     MyClass.main(new String[] {"arg1", "arg2", "arg3"}); 
    } 

    public static void main(String args[]) { 
     for (String s : args) 
      System.out.println(s); 
    } 
} 
3

La respuesta es sí,

Desde main es una static método y es público método, usted puede hacer esto (y se compiló en mi caso):

/** 
* @author The Elite Gentleman 
* 
*/ 
public class Test { 

    /** 
    * 
    */ 
    public Test() { 
     super(); 
     // TODO Auto-generated constructor stub 
     Test.main(new String[] {"main"}); //Yes, it works and compiles.... 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     System.out.println("Hello"); 

    } 
} 
2

Sin duda, puede llamar a la -method main al igual que un procedimiento ordinario (estática) de esta manera:

TheClass.main(new String[] { "lorem", "ipsum" }); 

Como nota al margen, se podría declarar el método principal de la siguiente manera:

public static void main(String... args) { ... } 

y llamarlo como

TheClass.main("lorem", "ipsum"); 

El bytecode generado es el mismo (los varargs se compilan en las matrices), por lo que es compatible con versiones anteriores de todas las formas (excepto que no se compilará en compiladores java no compatibles con vararg).

Cuestiones relacionadas