在运行时获取当前类名

时间:2012-07-20 20:42:18

标签: java java-native-interface

我有两节课:

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 App执行。

Appmain继承UThreadAppmain调用App.umain。我将以编程方式从Java或JNI获取主类名App,以便从JNI代码中调用App.umain。你有没有办法做到这一点?

成语new Object(){}.getClass().getEnclosingClass()UThreadApp返回{{1}}而失效。

1 个答案:

答案 0 :(得分:1)

静态方法没有类,也没有this引用。您的App课程将“继承”主要课程,因为该课程通常也可以调用为App.main。但是you cannot override static methods在常识中。一旦调用了该方法,就无法确定用于调用它的名称。因此,在Java方面或本机代码中,您所做的一切都不会为您提供所需的信息。除了攻击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);
    }
}