gpt4 book ai didi

java - 反射:从未知的正在运行的应用程序中获取值

转载 作者:行者123 更新时间:2023-12-01 05:51:34 26 4
gpt4 key购买 nike

我正在编写一个应用程序,用于在未知应用程序(由用户传递)的未知类字段中搜索信号量类型。我使用 Reflection 制作了它,并且成功了。

现在我想用值填充这些信号量,从这个未知应用程序的运行实例中获取它们。所以我用这个未知应用程序的“main”方法获取了类,创建了一个newInstance,并在调用main方法启动应用程序时传递了它:

Class mainClass = getItSomeWhere();
Object instance = mainClass.newInstance();
Method mainMethod = mainClass.getDeclaredMethod("main", new Class[]{String[].class});
mainMethod.invoke(instance, new Object[]{args});

效果很好。

现在,当我只有主类的实例时,如何从正在运行的应用程序的类中获取信号量值?

非常感谢您的回答。

最佳答案

好吧,信号量只是一个类,就像所有其他类一样。如果您指的是信号量类型的类级实例,那么它很简单(与处理其他类型的类级变量完全相同):

Class clazz = ...
for (Field f : clazz.getDeclaredFields()) {
if (f.getType().equals(Semaphore.class)) {
// do what you want here.
}
}

但是,如果您希望处理定义到方法中的变量,则必须使用字节码工程库之一(例如 Jakarta 的 BCL)。

顺便说一句,你真的不应该创建包含你的 main 方法的类的实例:

  • 您不知道要调用哪个构造函数以及使用哪些参数。
  • 类可能是抽象的,因此您根本无法实例化它。

关于java - 反射:从未知的正在运行的应用程序中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4517559/

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