JNI и доступ к подклассу - PullRequest
       1

JNI и доступ к подклассу

0 голосов
/ 19 сентября 2011

У меня есть Java-программа, которая общается с C-программой.Я уже писал JNI, но моя структура вывода была более упрощенной, а структура C просто содержала double / ints и массивы double / ints.

Теперь моя структура содержит подструктуру (класс / подкласс), и я незнать, как изменить код для доступа к данным / полям подкласса.

Мой код на C выглядел следующим образом, но как мне получить доступ к значению типа DefaultFeeAmount, если вы посмотрите на мой класс Java ниже этого кода ...Как мне добраться до элементов внутри подкласса?

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() {
    }
}

1 Ответ

0 голосов
/ 22 мая 2012

В качестве распространенного совета по Java-соглашениям, пожалуйста, начинайте имена переменных со строчных букв. Вот как вы можете получить доступ к «структурам» полей в Java.

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 = ...;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...