+-
java – 在JNI中启用枚举?
鉴于:

enum Foo
{
  FIRST,
  SECOND
}

以下代码的JNI等价物是什么?

Foo foo = ...;
int value;
switch (foo)
{
  case FIRST:
    value = 1;
    break;
  case SECOND:
    value = 2;
    break;
}

我知道我可以使用JNI的foo.equals(Foo.FIRST),但我想获得与switch(enum)相同的性能.有任何想法吗?

最佳答案
您可以在编译枚举之后但在编译JNI代码之前运行一个流程步骤.它将加载枚举并将值输出到.h文件.然后,您的JNI代码包含此.h文件.

编辑:

这是执行此操作的一些代码.它需要被修改为接受参数并写入文件而不是System.out,但这很容易做到.

    URL u = new File("/home/adam/tmp").toURL();
    URLClassLoader loader = new URLClassLoader(new URL[] {u}, Test.class.getClassLoader());
    Class<? extends Enum> c = (Class<? extends Enum>) loader.loadClass("Color");
    PrintStream out = System.out;
    out.println("#ifndef COLOR_H");
    out.println("#define COLOR_H");
    for(Enum constant : c.getEnumConstants()) {
        out.println("#define " + c.getCanonicalName().replaceAll("\\.", "_") + "_" + constant.name() + " " + constant.ordinal());
    }
    out.println("#endif");
点击查看更多相关文章

转载注明原文:java – 在JNI中启用枚举? - 乐贴网