Domanda

Abbiamo una quantità abbastanza grande di codice che ha appena fatto il salto in Java 5. Abbiamo usato generici in quei componenti destinati a essere rilasciati nella versione Java 5, ma il codice rimanente è, ovviamente, pieno di tipi grezzi. Ho impostato il compilatore per generare un errore per i tipi non elaborati e ho iniziato a cancellarli manualmente, ma al momento attuale ci vorrà molto tempo molto (ci sono circa 2500 errori). E questo con l'utile soluzione rapida Infer Generic Type di Eclipse, che elimina sempre gli errori, ma spesso genera codice che necessita di ulteriore lavoro.

Esiste un modo migliore per affrontarlo? Esistono strumenti automatizzati migliori di Eclipse? Un modo per applicare il refactoring a tutte le occorrenze invece di farle una per una? O semplicemente ignori gli avvisi?

È stato utile?

Soluzione

Suggerirei di ignorare gli avvisi. Altrimenti, impiegherai molto tempo ad aggiornare il codice legacy senza apportare miglioramenti alla sua funzionalità.

Aggiornamento: Ottimo commento da Luke che pensavo dovesse avere maggiore visibilità: " I generici sono un modo per rilevare i bug di runtime in fase di compilazione. A meno che questo codice legacy non contenga bug che ritieni siano correlati al casting, lo lascerei da solo (se non è rotto, non aggiustarlo) "

Altri suggerimenti

Per quanto ne so, lo farai nel modo più efficiente possibile. Suo ovviamente non perfetto, ma alla fine finirai.

Ti consiglio comunque di farlo per gradi; ci sono probabilmente parti del codice che trarrebbe maggior beneficio da questo rispetto ad altri, focalizzarsi su quelli. Provando a fare tutto in una sola volta corre il rischio di introdurre nuovi bug nel tuo codice. Noi abbiamo uno di questi posti in cui abbiamo una collezione che dipende dal contesto dati e generici in realtà non possono funzionare per questo.

Fondamentalmente, fai quello che stai facendo, ma fallo a tappe come parte di altri lavori, invece di provare a sistemare tutto in un colpo solo.

Di fronte a una sfida simile, abbiamo optato per l'aggiornamento ai generici in stile Java 5 solo nel codice che è stato modificato per un altro motivo. Quindi, se hai un bug da correggere in DoItFast.java, aggiorna DoItFast.java per usare i generici in stile Java 5. Le aree del codice che vengono modificate e modificate regolarmente verranno aggiornate rapidamente. Dopo alcune settimane o mesi di questo comportamento, puoi rivalutare la condizione della tua base di codice.

Se ciò non ti consente di svolgere il lavoro abbastanza velocemente per te, a volte userò il tempo lento dopo pranzo per pulire semplicemente alcune lezioni e accelerare il processo.

Non credo sia necessario aggiornare tutto il vecchio codice. Forse se potessi in qualche modo identificare quali parti del vecchio codice vengono utilizzate di frequente e aggiornarle solo per utilizzare tipi generici? O forse potresti preoccuparti solo quando il tipo grezzo viene restituito da una funzione pubblica? Molti di questi casi sono probabilmente solo variabili private / locali, che sono già scritte senza tipi generici e presumibilmente funzionano bene, quindi probabilmente non vale la pena di riscriverle.

Ho capito che con IDEA puoi selezionare tutte le tue classi, aprire il menu contestuale e selezionare Refactor | Generify. Lavoro fatto. È sicuramente un'esperienza più divertente lavorare con il codice generato (IMO).

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