Mechanizm przetwarzania adnotacji

0

Mam napisac adnotacje ktora umozliwia:

  • nadanie wartości zmiennym wejściowym modelu przed wykonaniem obliczeń,
  • pobranie wartości zmiennych wyliczonych w modelu (po wykonaniu obliczeń).

I uzyc mechanizmu przetwarzania adnotacji. Czytam dane z pliku i mam je przekazac do zmiennych oznaczonych adnotacja, potem zostana wykonane na nich jakies obliczenia, a nastepnie mam pobrac ich wartosci. Robie to przez refleksje ale wtedy jest bez roznicy czy jest adnotacja czy tez jej nie ma program dziala tak samo. Mam pytanie jak moge sie odniesc do tych adnotacji, zastosowac ten mechanizm przetwarzania adnotacji. Pozniej kawalek kodu

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

}

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

  public Model() {}

  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];
    }
  }
}
public class Controller{

private Class class1;
private Object modelName;
class1 = Class.forName("Model");
            modelName = class1.newInstance();

/*Przyklad jak ustawiam dane przez refleksje */
Field fieldtkWI  = class1.getDeclaredField("twKI");
            fieldtkWI.setAccessible(true);
            fieldtkWI.set(modelName, twKI);
}
2

Bo powinieneś w refleksji odczytać adnotacje pola, i ustawiać te pola z Twoją adnotacją. Pobierz metodą fieldtKW.getAnnotations() tablicę adnotacji pola, potem przeleć po niej sprawdzając metodą annotationType() czy jest tam Twoja adnotacja i dopiero wtedy ustawiaj pole. Samo się nie zrobi ;)

0

A gdybym użył takiej konstrukcji (fieldtwKI.isAnnotationPresent(Bond.class)) to byłoby równoważne?

1

Jasne, w Twoim przypadku to nawet lepiej. Myślałem, że chcesz wyciągać parametry adnotacji a tu jak widzę ich nie masz.

0

Ostatnie pytanie. Jak przy ustawianiu wartosci pol sprawdzalem adnotacje to przy wczytywaniu ich po obliczeniach nie musze znowu tak ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1