gpt4 book ai didi

java - 在运行时获取当前类名

转载 作者:行者123 更新时间:2023-12-01 15:16:07 24 4
gpt4 key购买 nike

我有两个类:

public class UThreadApp {
public static void main(String[] args) {
newUThread("umain", args);
...
}
native void newUThread(String method, String[] args);
}

public class App extends UThreadApp {
public static void umain(String[] args) {
...
}
}

应用程序作为java应用程序执行。

AppUThreadApp 继承 main,以便 main 调用 App.umain 。我必须以编程方式从 Java 或 JNI 获取主类名 App ,以便从 JNI 代码调用 App.umain 。你有办法做到这一点吗?

诸如 new Object(){}.getClass().getEnendingClass() 之类的习惯用法不起作用,因为它们返回 UThreadApp

最佳答案

静态方法没有类,也没有 this 引用。您的 App 类将“继承” main,因为该 main 通常也可以作为 App.main 进行调用。但是you cannot override static methods在常识中。一旦调用该方法,就无法确定使用什么名称来调用它。因此,无论您在 java 端还是在 native 代码中执行任何操作,都不会为您提供所需的信息。除了破解 java 可执行文件并找出其命令行参数或类似的残酷且不受支持的方法之外,就是这样。

注意:静态 main 尝试调用非静态 newUThread 时也会出现错误。

您可以做这样的事情,离开static范围并获得合理的this指针:

public class UThreadApp {
protected void UThreadApp(String[] args) {
newUThread("umain", args);
...
}
native void newUThread(String method, String[] args);
}

public class App extends UThreadApp {
public void main(String[] args) {
new App(args);
}
public App(String[] args) {
super(args);
}
}

关于java - 在运行时获取当前类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586686/

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