import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; import java.util.stream.Collectors; public class Runner { public static void callToString(Object obj) { try { Method m = obj.getClass().getMethod("toString"); try { System.out.println(m.invoke(obj)); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } catch (NoSuchMethodException e) { } } public static void runMain(Class c, Object[] args) { /*Class a[] = new Class[args.length]; for (int i = 0; i < args.length; i++) { a[i] = args[i].getClass(); }*/ try { //Method m = c.getMethod("main", a); Method m = c.getMethod("main", Arrays.stream(args) .map((arg) -> arg.getClass()) .collect(Collectors.toList()) .toArray(new Class[args.length])); try { m.invoke(null, args); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } catch (NoSuchMethodException e) { } } public static void main(String [] args) { if (args.length == 1 && args[0] == "Hello World!") System.out.println(args[0]); else { runMain(Runner.class, new Object[] { new String[] {"Hello World!"} }); callToString(new java.awt.Point()); } } }