我有一个与 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/