A general tip is to check the generated byte code before trying to figure out the scala classes. Sometimes it scalaccan create unintuitive bulky bytecode. For example, the class class
case class CaseClass(value: Int)
- ( procyon)
public class CaseClass {
public static CaseClass apply(int p0) {
return:CaseClass(invokevirtual:CaseClass(CaseClass$::apply, getstatic:CaseClass$(CaseClass$::MODULE$), p0:int))
}
public int value() {
return:int(getfield:int(CaseClass::value, this:CaseClass))
}
}
CaseClass value
jmethodID apply = env->GetStaticMethodID(thisClass, "apply", "(I)LCaseClass;");
jobject object = env->CallStaticObjectMethod(thisClass, apply, 5);
jmethodID getValue = env->GetMethodID(thisClass, "value", "()I");
jint value = env->CallIntMethod(object, getValue);