2009-06-16 4 views
5

Una volta che un metodo è contrassegnato come deprecato, ci sono strumenti che sostituiscono questi metodi con soluzioni alternative non deprecate?Java: De-deprecated-Tools

+0

Questo deve essere il titolo più complicato che abbia mai visto: P –

+0

... e stavo cercando di essere conciso. doh –

risposta

4

Gli strumenti automatici potrebbero gestire solo i casi in cui è necessario utilizzare un nuovo metodo o classe preferito per eseguire esattamente lo stesso compito. Ogni caso in cui un metodo è deprecato a causa di un design difettoso (penso che qualsiasi cosa abbia a che fare con date in Java) o perché un modo "migliore" sia ora supportato (pensiamo a AWT a Swing o SWT) richiede molto tempo per essere automatizzato.

In breve, non ci sono tali strumenti. Dubito che ce ne saranno mai anche in futuro.

12

Se si desidera eseguire questa operazione automaticamente - no.

Lo strumento è denominato programmatore.


La ragione è che gli strumenti avrebbero bisogno di capire profondamente sia la deprecazione, il 'non-deprecazione', il programma e il linguaggio di programmazione di destinazione.

Ad esempio, java.util.Date.setMonth è deprecato a favore di Calendar.set(Calendar.MONTH, int month).

Questa è una modifica non banale da applicare, poiché richiede la sostituzione di istanze di oggetti, chiamate di metodi, tenendo conto della sincronizzazione. In realtà da incubo a fare automaticamente.

+1

Sebbene sia una risposta divertente, in realtà non prende seriamente la domanda -1 – krosenvold

+0

@krosenvold: Sono quasi sempre mezzo idiota, è il mio modo di presentare argomenti. Ho fatto _non_ prendere in giro la domanda, e io resto dalla mia opinione. E grazie per il +1 Funny/-2 Mod non grave :-), ma soprattutto per aver lasciato un commento. –

+0

La tua modifica recente è bella. – krosenvold

1

Non riesco a vedere come funzionerebbe al momento. In genere almeno lo è stato pensato per il che ha richiesto la modifica del codice client. Idealmente il metodo deprecato includerà un commento che dice "Usa il metodo X invece, passando in null come parametro finale" o qualcosa di simile, ma solo nei casi più semplici questo potrebbe essere completamente automatizzato. Spesso ci sarà qualcosa del tipo "Se hai bisogno di gestire voci nulle, usa X. Altrimenti, usa Y."

(Inoltre, anche nei casi più semplici, non c'è modo corrente di rappresentare la trasformazione in un formato leggibile dalla macchina -. Fondamentalmente il protocollo appropriato non è stato definito, per quanto io sappia)

È una buona idea, ma ho il sospetto che implementarlo in modo utile introduca più complessità di quanto non eliminerebbe. Inoltre, sarei molto diffidente nei confronti di uno strumento che esegue questo per me in modo completamente automatico - probabilmente vorrei comunque visualizzare un'anteprima di ogni modifica. A quel punto, di solito non si risparmia molto tempo per farlo manualmente.

2

In genere, è necessario utilizzare qualcosa come espressioni regolari, ANTLR o JavaCC per implementare il proprio strumento.

Inoltre, alcuni IDE offrono strumenti di livello più alto per facilitare questo. In IntelliJ IDEA si tratta di refactoring "Structural Search and Replace" e "Migrate".