Подтвердить что ты не робот

Можно ли вызвать основной метод, передающий args [] из другого метода?

Я пытаюсь вызвать основной метод класса из другого метода, передавая такие аргументы, как при запуске класса из командной строки. Есть ли способ сделать это?

4b9b3361

Ответ 1

Вы можете вызвать метод main, как вы бы назвали любой другой (статический) метод:

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

Пример:

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);
    }
}

Ответ 2

Да, основной метод можно вызвать как любой другой метод, поэтому, если у вас есть тест класса с основным методом, вы можете вызвать его из любого другого класса, например:

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

и таким образом вы передадите "a" и "b" в качестве параметров.

Ответ 3

Вы пробовали что-то вроде:

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

Но я думаю, что это не очень хорошая идея, метод main() должен содержать только очень простой код, который вызывает конструктор. Вы не должны вызывать его напрямую, а скорее создать новый экземпляр другого класса, который будет выполнять всю необходимую инициализацию.

Ответ 4

Ответ: да,

Так как main - это метод static и общедоступный метод, вы можете сделать это (и он скомпилирован в моем случае):

/**
 * @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");

    }
}

Ответ 5

Конечно, вы можете вызвать метод main как обычный (статический) метод следующим образом:

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

В качестве дополнительной заметки вы можете объявить основной метод следующим образом:

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

и назовите его как

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

Созданный байт-код тот же (varargs скомпилированы в массивы), поэтому он совместим во всех отношениях (за исключением того, что он не будет компилироваться в java-компиляторах, отличных от vararg).

Ответ 6

Вы можете просто переименовать свой главный и создать новый, чтобы он назвал "новый" основной. По крайней мере, то, что я обычно делаю при модульном тестировании