gpt4 book ai didi

java - 如何在运行时从外部 jar 访问方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:40 29 4
gpt4 key购买 nike

这是问题的延续:How to load a jar file at runtime

我不确定如何继续到方法调用级别。据我了解,从 clazz 对象中,我会使用 getMethod 或 getDeclaredMethod 来获取一个 Method 对象,我将从中调用 invoke。当然,调用需要一个实例。那会不会就是示例代码中所谓的 doRun?

我是否需要执行 doRun.run() 方法调用,即使我想执行与 main 不同的方法(假设它是通过 run 调用调用的 doRun 对象上的 main 方法)?

为了更清楚地说明原帖,我问:doRun.run() 是否启动一个新线程执行clazz类型的类对象的实例?

感谢您帮我解决这个问题。

我确实看过“how-should-i-load-jars-dynamically-at-runtime”(抱歉,只允许一个超链接),但这看起来违反了我引用的第一篇文章中的 Class.newInstance 邪恶警告.

最佳答案

下面是一些不转换为接口(interface)的反射代码:

public class ReflectionDemo {

public void print(String str, int value) {
System.out.println(str);
System.out.println(value);
}

public static int getNumber() { return 42; }

public static void main(String[] args) throws Exception {
Class<?> clazz = ReflectionDemo.class;
// static call
Method getNumber = clazz.getMethod("getNumber");
int i = (Integer) getNumber.invoke(null /* static */);
// instance call
Constructor<?> ctor = clazz.getConstructor();
Object instance = ctor.newInstance();
Method print = clazz.getMethod("print", String.class, Integer.TYPE);
print.invoke(instance, "Hello, World!", i);
}
}

将反射类写入消费者代码 (as in the example) 已知的接口(interface)通常更好,因为它可以避免反射并利用 Java 类型系统。仅当您别无选择时才应使用反射。

关于java - 如何在运行时从外部 jar 访问方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1319661/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com