java如何获取传递给JNI的枚举值
我有一个Java应用程序和JNI(dll)。我想知道如何获取作为参数传递给JNI的枚举(int)的值
以下是枚举(Java):
public enum envelopeType
{
NOT_SPECIFIED(-1),
NONE(0),
IMAGE(1),
BITMAP(2);
private int value;
private envelopeType(int value)
{
this.value = value;
}
}
以下是JNI代码(C++):
JNIEXPORT jint JNICALL Java_Loader_Convert
(JNIEnv *env, jobject obj, jobject EnvelopeType)
既然枚举是作为对象传递的,我怎么能得到它的值呢
# 1 楼答案
我无法使用@tbodt提供的解决方案,但他的解决方案离我很近,我能够找到解决方案
查看java enum documentaiton有一个方法
ordinal
,它将以int
类型返回枚举值我使用的代码与@tbodts解决方案中的代码几乎相同,但是传递到
GetMethodID
函数中的字符串是不同的。我不需要创建getValue
方法,方法签名是()I
而不是I()
# 2 楼答案
实际上,您可以调用
Enum.ordinal()
,而不是定义getValue()
方法一个更简单的解决方案是稍微修改C代码,在调用JNI函数时直接使用
Enum.ordinal()
,即传递一个jint
而不是Enum
对象:在Java中,你得到了一种
http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#ordinal%28%29
# 3 楼答案
您将提供一个方法来返回
value
的值,然后从本机代码调用该值并使用switch
语句。以下是枚举中的方法:以及您的本地方法: