Ett probexempel på staticField och staticInitializer

I det här exemplet demonstreras användningen av dataobjektet staticField och probfragmentet staticInitializer.

I det här exemplet används proben till att hålla reda på när förekomsterna för en klass skapas. Om en förekomst skapas mer än en sekund efter den föregående förekomsten av klassen registreras ett loggmeddelande.

Det här är vad som händer med proben:
  1. Med hjälp av definitionen för det statiska fältet skapas ett statiskt fält av typen Date i varje klass där proben körs. Det statiska fältet initieras med ett anrop till new Date();.
  2. I fragmentet staticInitializer anges "time zero" (januari 1970) för förekomsten Date för en klass där proben körs när den är inläst.
  3. I fragmentet entry används proben till att kontrollera när den föregående uppdateringen utfördes och att rapportera om uppdateringen ägde rum för mer än en sekund sedan. (På grund av målreglerna kan fragmentet entry endast köras i konstruktorer.)
  4. Slutligen uppdateras värdet på förekomsten Date till "now".

I proben används den statiska fältdefinitionen till att skapa ett nytt statiskt fält i alla klasser som proben körs. Som jämförelse resulterar användningen av ett fragment i klassomfattning till att deklarera fältet Date i att en enda förekomst av Date visas i den genererade klass där probfragmenten finns, oavsett hur många klasser proben används på. Du kan göra det här om du vill spåra tidsfördröjningen mellan att förekomster skapas för någon klass där proben körs, i stället för att spåra fördröjningen mellan att förekomster skapas för varje klass där proben körs.

Den här proben definieras av följande poster i Probekit-redigeraren:
  • Fullständigt kvalificerad Java-typ för statiskt fält (högerklicka på Prob i trädfönstret och klicka sedan på Nytt > Statiskt fält när du vill ange det här värdet):

    java.util.Date

  • Mål (ange de här värdena genom att välja Mål i trädfönstret och sedan klicka på Redigera):
    • Måltyp: include
    • Paket: com.sample* (Använd ett faktiskt paketnamn här.)
    • Klass: *
    • Metod: <init>
    • Metodsignatur: *
  • Mål (ange de här värdena genom att klicka på Lägg till och sedan på Redigera i redigeringsfönstret):
    • Måltyp: exclude
    • Paket: *
    • Klass: *
    • Metod: *
    • Metodsignatur: *
  • Fragment (välj Fragment i trädfönstret när du ska ange de här värdena):
    • Fragmenttyp: entry
    • Dataobjekt:
      • Datatyp: staticField, Namn: lastInstanceDate
      • Datatyp: className, Namn: clname
    • Java-kod:

      java.util.Date d = new java.util.Date();
      long now = d.getTime();
      long prev = lastInstanceDate.getTime();
      if (prev != 0 && prev + 1000 < now) {
        System.out.println("[" + clname + " förekomster efter > 1 sekund]");
      }
      lastInstanceDate.setTime(now);

    • Fragment (högerklicka på Prob och välj Nytt > Fragment när du vill ange de här värdena):
      • Fragmenttyp: staticInitializer
      • Dataobjekt:
        • Datatyp: staticField, Namn: lastInstanceDate
        • Datatyp: className, Namn: clname
      • Java-kod:

                 lastInstanceDate.setTime(0);
                 System.out.println("[" + clname + " klass inläst]");