我将为您翻译以下内容:
根据标准
在函数原型声明符中使用省略符符号会导致参数类型转换在最后一个声明的参数后停止。
与省略符符号对应的参数应该明确地转换为期望的类型,以使代码符合要求。考虑以下情况:
我正在使用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
);