Qual è il modo migliore per ottenere un nome di metodo in runtime?

-1

Ecco un piccolo background del mio problema: ho implementato una classe di logger singleton chiamata da diversi progetti.

Voglio registrare il nome della classe e il nome del metodo richiesto per la registrazione.

Finora, ho pensato a due modi per ottenere il nome del metodo e della classe - sia per riflessione che per scrittura manuale.

Il vantaggio dell'utilizzo della reflection è che ogni volta che il nome della classe o del metodo verrà rinominato, che non è così spesso, verrà aggiornato automaticamente.

Lo svantaggio della riflessione è che consuma le prestazioni e si consiglia di non utilizzarlo ogni volta che è possibile evitarlo, come si può vedere nella documentazione di reflection ( link ) o in vari thread online.

Quale sarebbe il modo migliore e perché?

    
posta Oz Radiano 18.06.2014 - 17:09
fonte

1 risposta

0

Presumo che stiamo parlando di Java tramite il link. Hai ragione, ovviamente. Il compromesso è velocità vs tempo di sviluppo / problemi.

Una libreria di registrazione popolare chiamata log4j accetta un nome di classe o una stringa come parametro di inizializzazione. La registrazione successiva eseguita dalla classe offrirà automaticamente il nome della classe come possibile informazione per l'output nel log senza doverlo specificare a ogni riga. Non trovo che sia un problema molto simile a questo. In effetti, in eclissi se controlli in Java - > Stile codice - > Modelli di codice, puoi predefinire nuove classi per istanziare automaticamente un logger che passa il nome della classe come parametro per risparmiare tempo, almeno per quanto riguarda il nome della classe.

In alternativa, puoi usare AspectJ come mezzo per ottenere l'handle di un metodo prima di una chiamata a un logger in modo da puoi aggiungere anche il nome della classe. AspectJ può funzionare sia in runtime sia in fase di compilazione e, in quest'ultimo caso, non vedrai il calo delle prestazioni che vedresti utilizzando il reflection poiché modifica il codice prima della compilazione.

Spero che ti aiuti!

    
risposta data 18.06.2014 - 17:24
fonte

Leggi altre domande sui tag