public class Student
{
private People people;
private Result result;
private int amount;
}
以下是Java中类的示例;在C中,我试图让“学生”中的“人”,但我失败了。但是,我可以从“学生”获得int类型“金额”。
jobject getObjectFromObject(JNIEnv *env, jobject obj, const char * fieldName)
{
jfieldID fid; /* store the field ID */
jobject i;
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, obj);
/* Look for the instance field s in cls */
fid = (*env)->GetFieldID(env, cls, fieldName, "L");
if (fid == NULL)
{
return 0; /* failed to find the field */
}
/* Read the instance field s */
i = (*env)->GetObjectField(env, obj, fid);
return i;
}
我试图将“people”作为fieldName传递给方法,但它仍然会出现以下错误:“java.lang.NoSuchFieldError:people”
答案 0 :(得分:8)
正如文档here所述,在GetFieldID
方法中,您不能单独使用“L”作为类型签名,您必须在此之后指定类名。
例如,如果要指定参数是String
,则必须使用Ljava/lang/String;
(最终分号是签名的一部分!)。
对于名为People
的自定义类,假设它位于包your.package.name
中,则必须使用Lyour/package/name/People;
作为类型签名。