Esempio di probe staticField e staticInitializer

Questo esempio illustra come utilizzare l'elemento dati staticField e il frammento probe staticInitializer.

In questo esempio, il probe tiene traccia del momento in cui vengono create le istanze di una classe. Se un'istanza di una classe viene creata più di un secondo dopo l'istanza precedente, il probe scrive un messaggio di log.

Di seguito vengono riportate le operazioni compiute dal probe:
  1. Utilizzando la definizione di campo statico, il probe crea un campo statico di tipo Data in tutte le classi con probe. Il campo statico verrà inizializzato richiamando new Date();.
  2. Nel frammento staticInitializer, il probe imposta l'istanza di Date di una classe con probe su "time zero" (gennaio 1970) al momento del caricamento.
  3. Nel frammento entry, il probe controlla quando è stato eseguito l'ultimo aggiornamento e produce un prospetto se l'aggiornamento è stato eseguito più di un secondo prima. A causa delle regole della destinazione, il frammento entry viene eseguito solo nei costruttori.
  4. Infine, il probe aggiorna l'istanza di Date su "now."

Il probe utilizza la definizione di campo statico per creare un nuovo campo statico in ciascuna delle classi con probe. Diversamente, se per dichiarare il campo Date, si utilizzasse un frammento nell'ambito della classe, una singola istanza di Date comparirebbe nella classe generata che contiene i frammenti probe, indipendentemente dal numero di classi a cui il probe è stato applicato. È possibile adottare questo approccio se si desidera tener traccia dell'intervallo di tempo tra una creazione di istanza e l'altra di tutte le classi con probe, piuttosto che tener traccia del medesimo intervallo per ciascuna delle classi con probe.

Questo probe è definito dalle seguenti voci nell'editor Probekit:
  • Tipo Java completo per il campo statico (per immettere questo valore, selezionare Probe nel riquadro della struttura ad albero, quindi scegliere Nuovo > Campo statico):

    java.util.Date

  • Destinazione (per immettere questi valori, selezionare Destinazione nel riquadro della struttura ad albero, quindi scegliere Modifica):
    • Tipo di destinazione: include
    • Pacchetto: com.sample* (Utilizzare il nome di un pacchetto esistente).
    • Classe: *
    • Metodo: <init>
    • Firma metodo: *
  • Destinazione (per immettere questi valori, scegliere Aggiungi, quindi Modifica nel riquadro di modifica):
    • Tipo di destinazione: exclude
    • Pacchetto: *
    • Classe: *
    • Metodo: *
    • Firma metodo: *
  • Frammento (per immettere questi valori, selezionare Frammento nel riquadro della struttura ad albero):
    • Tipo di frammento: entry
    • Elementi di dati:
      • Tipo di dati: staticField, Nome: lastInstanceDate
      • Tipo di dati: className, Nome: clname
    • Codice Java:

      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 + " instance after > 1 second]");
      }
      lastInstanceDate.setTime(now);

    • Frammento (per immettere questo valore, selezionare Probe con il tasto destro del mouse e scegliere Nuovo > Frammento):
      • Tipo di frammento: staticInitializer
      • Elementi di dati:
        • Tipo di dati: staticField, Nome: lastInstanceDate
        • Tipo di dati: className, Nome: clname
      • Codice Java:

                 lastInstanceDate.setTime(0);
                 System.out.println("[" + clname + " class loaded]");