java - JNI 和访问子类

标签 java c java-native-interface

我有一个与 C 程序通信的 Java 程序。我以前写过 JNI,但我的输出结构更加简单,C 结构只包含 double /整数和 double /整数数组。

现在我的结构包含一个子结构(类/子类),我不知道如何更改代码来访问子类数据/字段。

我的 C 代码看起来像这样,但是如果您查看此代码下面的 Java 类,我如何访问像 DefaultFeeAmount 这样的值......我如何获取子类中的元素?

C 简单......

{
    jclass out_rec_cls = jenv->GetObjectClass(ptrTo_out_rec);
    jfieldID fldID, fldID2;
    jintArray arr;
    jdoubleArray darr;
    jobjectArray oarr;
    jsize len;//,len2;
    jint *arrElems;
    jdouble *darrElems;
    jobject *oarrElems;
    int i;
    char temp_str[100],temp_str2[10000];

    fldID = jenv->GetFieldID(out_rec_cls, "ErrorCode", "I");
    if(fldID != NULL)
        jenv->SetIntField(ptrTo_out_rec, fldID, out_rec->error_code);
}

Java

class FeeOutput {
    public double DefaultFeeAmount;
    public double MaximumAmount;
    public int FeeID;
    public int CompType;
    public int Handling;
    public int CapType;
    public int ProfitType;
    public int EffectiveDateMonth;
    public int EffectiveDateDay;
    public int EffectiveDateYear;
    public int VendorBasedFee;
    public int DealerRequestedFee;
    public int DealerFixedTranFee;
    public double FeeAmount;
    public int FeeCompliant;
    public String FeeName = "";

    public FeeOutput() {
    }
}

public class VFeeOutput {
    public static final int NUM_FEES = 100;
    public FeeOutput[] FeeStruct = new FeeOutput[NUM_FEES];

    public int ErrorCode;

    public String ErrorString = "";

    public String Version = "";

    public VFeeOutput() {
    }
}

最佳答案

作为一个广泛使用的 Java 约定技巧,变量名请以小写开头。下面介绍如何访问 Java 中的“struct”字段。

public class VFeeOutput {
    public static final int NUM_FEES = 100;
    public FeeOutput[] FeeStruct = new FeeOutput[NUM_FEES];
    public int ErrorCode;
    public String ErrorString = "";
    public String Version = "";
    public VFeeOutput() {
    }

    private void loopThoughtFeeOutput() {
        for(FeeOutput feeOutput : FeeStruct) {
            feeOutput.CompType = ...;
        }
        // or
        for(int i = 0; i < FeeStruct.length; i++) {
            FeeStruct[0].CompType = ...;
        }
    }
}

关于java - JNI 和访问子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475397/

相关文章:

java - 如何定义一个自动获取重写方法的java注释?

java - Box上传后获取文件ID

c - C 中函数使用的动态数组

Java JNIEnv 段错误

java - 如何在c中将jcharArray转换为char[]

java - 正则表达式导致模式语法异常

java - 强制关闭简单的android编码

C 以十六进制值初始化数组

c - 系统调用读取行为怪异

java - JNI 包装器或回调的替代方案