Java如何反射调用带有Scanner的main方法

新手上路,请多包涵

这种情况Test类中的main 方法如何通过反射调用Main中的main 方法,不在控制台输入。

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        System.out.println(n);
    }
}

public class Test {

    public static void main(String[] args) throws Exception {
        Class clazz = Main.class;
        Method method = clazz.getDeclaredMethod("main", String[].class);
        method.invoke(null, (Object)(new String[]{"1"}));
    }
}
阅读 2.1k
1 个回答

调用之前把 System.in 换成自己控制的就行了

    public static void main() {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        System.out.println(n);
    }

    public static void main(String[] args) throws Exception {
        Method main = Test.class.getMethod("main");
        // 做一个假的输入流,输入“123换行”
        ByteArrayInputStream inputStream = new ByteArrayInputStream("123\n".getBytes(StandardCharsets.UTF_8));
        InputStream oldInputStream = System.in;
        // 替换成自己的流
        System.setIn(inputStream);
        main.invoke(null);
        // 换回去
        System.setIn(oldInputStream);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题