如何在JAVA (Android NDK)中访问.h中声明的枚举

C++ / JNI - How to access enum declared in .h in JAVA (Android NDK)

本文关键字:访问 声明 枚举 NDK JAVA Android      更新时间:2023-10-16

我有一个c++头文件,其中声明了一些enum。

// enum.h
enum event {
    event_1,
    event_2,
    event_3,
    event_4
}

c++文件和头文件在库.so中编译(使用GNU)。

现在我想在我的Java类中这样做:

// Test.java
public class Test {
    private event currentEvent;
    public test() {
        if (currentEvent == event.event_1)
            ; // I will do my stuff
    }
}

谁有建议?

谢谢

我怀疑是否有直接的方法来做到这一点。

对于C或c++,您可以使用SWIG。它会自动为c++类和元素生成Java包装器。

21.3.5.5简单枚举

此方法类似于类型不安全方法。每个枚举项也包装为静态final整数。然而,这些整数是而不是生成一个以C/c++枚举命名的类。相反,全球枚举被生成到常量接口中。此外,还定义了枚举在c++类中直接将枚举项生成到Java中而不是Java代理类中的内部类。在事实上,这种方法有效地包装了枚举,就好像它们是匿名枚举,结果代码与匿名枚举相同。的实现在"enumsimple"中。swg"文件。

兼容性注意:SWIG-1.3.21和更早的版本包装了所有枚举使用这种方法。类型不安全的方法优于此方法一个,这个简单的方法只包括向后与这些早期版本的SWIG的兼容性