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

发布于 2022-09-30 23:11:21 字数 529 浏览 14 评论 0

这种情况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"}));
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妳是的陽光 2022-10-07 23:11:21

调用之前把 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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文