Мои аннотации не работают правильно, результаты расчетов неверны - PullRequest
0 голосов
/ 20 января 2019

У меня есть модель модели, в которой значения помечены аннотацией BIND.Аннотация должна позволять:

  • присваивать значения входным переменным модели перед выполнением расчетов

  • загружать значения переменных, рассчитанные в модели(после проведения расчетов).

Я считываю данные из файла и с помощью отражения передаю их значения переменным в классе модели.Моя проблема в том, что аннотация ничего не меняет.У меня неверные результаты вычислений.

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Bind {

}  

public class Model1 {
@Bind private int LL;
@Bind private  double[] twKI;
@Bind private  double[] twKS;
@Bind private  double[] twINW;
@Bind private  double[] twEKS;
@Bind private  double[] twIMP;
@Bind private double[] KI;
@Bind private double[] KS;
@Bind private double[] INW;
@Bind private double[] EKS;
@Bind private double[] IMP;
@Bind private double[] PKB;

public Model1() {}

public void run() {
 PKB = new double[LL];
 PKB[0] = KI[0] + KS[0] + INW[0] + EKS[0] - IMP[0];
 for (int t=1; t < LL; t++) {
  KI[t] = twKI[t]* KI[t-1];
  KS[t] = twKS[t]* KS[t-1];
  INW[t] = twINW[t]* INW[t-1];
  EKS[t] = twEKS[t]* EKS[t-1];
  IMP[t] = twIMP[t]* IMP[t-1];
  PKB[t] = KI[t] + KS[t] + INW[t] + EKS[t] - IMP[t];
 }
}
}

Так что он дает значение в классе мода из другого класса

Field fieldLL = class1.getDeclaredField("LL");
        fieldLL.setAccessible(true);
        fieldLL.setInt(modelName, LL);

        Field fieldtkWI  = class1.getDeclaredField("twKI");
        fieldtkWI.setAccessible(true);
        fieldtkWI.set(modelName, twKI);

        Field fieldtwKS = class1.getDeclaredField("twKS");
        fieldtwKS.setAccessible(true);
        fieldtwKS.set(modelName, twKS); 

и т. Д.

И вызывает метод run

Method method = class1.getDeclaredMethod("run");
        method.invoke(modelName);

            Field fieldPKB = class1.getDeclaredField("PKB");
            fieldPKB.setAccessible(true);
            PKB = (double[]) fieldPKB.get(modelName);

И, например, значение pf pkb из моего кода:

PKB     1714273.4   1893950.2719999999  2115659.0986     
2362962.8638815996    2638886.923654132

И оно должно быть

 PKB    1714273.4   1815516.032 1944672.4554000003   
 2083203.6166496002     2231733.528866293  

Только первое правильное значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...