Я пытаюсь вызвать основной метод класса из другого метода, передавая такие аргументы, как при запуске класса из командной строки. Есть ли способ сделать это?
Можно ли вызвать основной метод, передающий args [] из другого метода?
Ответ 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
Вы можете просто переименовать свой главный и создать новый, чтобы он назвал "новый" основной. По крайней мере, то, что я обычно делаю при модульном тестировании