【发布时间】:2019-05-18 18:46:23
【问题描述】:
我正在用 C11 编写 JNI 人员,并且有一个关于严格符合堆对象创建的问题。
JNI API 提供了执行此操作的函数,其签名如下:
jobject NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
在6.5.2.2(p7) 标准中指定
函数原型声明器中的省略号表示 在最后一个声明的参数之后停止参数类型转换。
与省略号表示法对应的参数应显式转换为预期类型,以使代码符合要求。考虑以下情况:
public class Event{
public final int eventType;
public final String meta;
public Event(int eventType, String meta){
this.eventType = eventType;
this.meta = meta;
}
}
省略号对应的参数应该转换成什么类型的参数?
我猜它应该如下所示:
jclass event_class = ((*env)->FindClass)(env, "f/q/c/n/Event");
jmethodID ctor = (*env)->GetMethodID(
env,
event_class,
"<init>",
"(ILjava/lang/String;)V"
);
array_element = (*env)->NewObject(
env,
event_class,
ctor,
(jint) 0, (jobject) NULL //corresponds to the ellipsis
);
【问题讨论】:
标签: java c jvm language-lawyer