Domanda

Sto cercando una soluzione per generare codice. Ho cercato su Google, cercato su così e alcuni blog, ma non ho trovato una buona soluzione.

Vorrei mettere un'annotazione sulla mia classe e al momento della compilation, alcuni metodi e proprietà verrebbero automaticamente aggiunti alla classe.

Punti chiave della soluzione che sto cercando:

  • Codice generato personalizzabile (obbligatorio)
  • Nessuno strumento esterno come apt devono essere chiamati (obbligatorio)
  • Solo JDK, nessun framework di terze parti (OBBLIGATORIO OPZIONALE)
  • Nome annotazione personalizzabile (opzionale)

Per esempio :

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}

La mia classe sembrerebbe così dopo la compilazione:

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}

MODIFICARE:
Infine, ho trasformato il mio terzo requisito da obbligatorio a opzionale e scelto Project Lombok (Facile integrazione con Maven ed Eclipse, praticamente nessun lavoro da fare per usarlo).

È stato utile?

Soluzione

Dai un'occhiata a Project Lombok. Genera il codice mentre chiedi quando scrivi:

public class MyClass {
  @Getter @Setter private String alias;
}

Fa anche molto di più se ne hai bisogno. So che non hai chiesto strumenti esterni, ma sostanzialmente lo ricrearesti.

Altri suggerimenti

Il Strumento di elaborazione delle annotazioni è stato integrato in Javac Poiché la versione 1.6 ed è parte del JDK. Quindi non sono necessari strumenti esterni quando si utilizza il API di annotazione collegabile. È possibile generare qualsiasi codice analizzando le annotazioni personalizzate o le dichiarazioni del metodo/parametro/campo/classe utilizzando il API a specchio.

L'API del processore di annotazione dice che non dovresti cambiare le classi esistenti. Invece dovresti generare sottoclassi di classi esistenti e creare metodi di estensione su tali sottoclassi.

Sembra comunque possibile cambiare le classi (ad es. Usando librerie di manipolazione bytecode) anche se in contrasto con le specifiche e potrebbe portare a problemi con altri processori di annotazione e potrebbe non funzionare con tutti i compilatori allo stesso modo.

Uso XML e XSLT per generare codice. È usato per EJB, logica e la parte del CRUD delle viste. Non è birichino in fase di esecuzione ma invece sul buildserver. Gli sviluppatori possono generare manualmente il codice per scopi di sviluppo. Questo viene fatto con lo stesso comando che Ant usa sul buildserver.

Poiché la generazione è con XML e XSLT, è altamente personalizzabile.

Se tu Google Java code generation with XSLT Ti imbatterai in molti esempi. Si noti che questa tecnica risale a ~ 2000 e quindi probabilmente è stata preceduta da soluzioni più facili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top