I'm writing JNI staff in C11 and have a question about strictly-conforming on-heap object creation.
JNI API provides a function to do this with the following signature:
jobject NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
As specified in the 6.5.2.2(p7) Standard
The ellipsis notation in a function prototype declarator causes argument type conversion to stop after the last declared parameter.
Arguments corresponding to the ellipsis notation should be explicitly converted to the expected type in order for the code to be conforming. Consider the following case:
public class Event{
public final int eventType;
public final String meta;
public Event(int eventType, String meta){
this.eventType = eventType;
this.meta = meta;
}
}
What types of the arguments I should convert the parameters corresponding to the ellipsis to?
I can guess that it should look as follows:
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
);