gpt4 book ai didi

java - 关于 GetFieldID 的说明

转载 作者:行者123 更新时间:2023-11-30 06:08:28 29 4
gpt4 key购买 nike

我试图构建一个本地方法,虽然它似乎运行良好,但我很难理解函数中的字段 [*sig] -

jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);

https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html

例如,我有一个小的 Java 代码,它使用一个名为“i”的实例变量,所有这个 native 方法(名为 test)所做的就是将其乘以 2。

现在我指的是 Java Complete Reference book - 这里的代码是这样的 -

我的问题是 - 这里的“我”是什么 - fid = (*env)->GetFieldId(env,cls,"i", "I");

当我阅读 Oracle 文档时,它说 - https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html

Accessing Fields of Objects
GetFieldID

    jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);

Returns the field ID for an instance (nonstatic) field of a class. The field is specified by its name and signature. The GetField and SetField families of accessor functions use field IDs to retrieve object fields.
GetFieldID() causes an uninitialized class to be initialized.
GetFieldID() cannot be used to obtain the length field of an array. Use GetArrayLength() instead.
LINKAGE:
Index 94 in the JNIEnv interface function table.
PARAMETERS:
env: the JNI interface pointer.
clazz: a Java class object.
name: the field name in a 0-terminated modified UTF-8 string.
sig: the field signature in a 0-terminated modified UTF-8 string.

您能否详细说明这个字段“sig”是什么?我无法将“我”与任何事物联系起来。

#include <jni.h>
#include "NativeDemo.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_NativeDemo_test(JNIEnv *env , jobject obj)
{
jclass cls;
jfieldID fid;
jint i;

printf("Starting the native method\n");

cls = (*env)->GetObjectClass(env,obj);
fid = (*env)->GetFieldId(env,cls,"i", "I");

最佳答案

这里的“I”是原始整数类型的签名。 Oracle 提供了一个类型签名表:http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp276

  • Z boolean 值
  • B字节
  • C字符
  • 我知道
  • J长
  • F float
  • D双

对于非原始类型,签名的形式为

  • L 完全合格的类(class) ;

对于数组,添加了[。

对于方法,()用于分隔参数和返回值。

关于java - 关于 GetFieldID 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39823375/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com