Java: come rendere definitivi i campi e i campi locali senza avere una parola chiave 'finale' su ogni dichiarazione

4

Per impostazione predefinita, voglio che tutte le mie variabili locali e i parametri del metodo siano definitivi. Sfortunatamente, i progettisti di linguaggio Java hanno scelto un diverso default: le variabili e i parametri sono per default non-finali, e le variabili finali e i parametri devono essere dichiarati con la parola chiave final . Quindi ho bisogno di aggiungere molte finali. (E ovviamente non lo faccio manualmente, ma ho il mio IDE per aggiungerli per me.)

Quindi finisco con il codice sorgente in cui ogni caso predefinito è contrassegnato, mentre le eccezioni al mio predefinito preferito sono appena visibili. Per motivi di leggibilità, mi piacerebbe che fosse il contrario, cioè solo variabili e parametri locali non finali dovrebbero essere contrassegnati / evidenziati / annotati /...

È possibile?

Sono aperto a soluzioni che si integrano a diversi livelli, ad es. piegando all'interno dell'editor, controlli di stile, passi di costruzione, ecc ...

    
posta oberlies 29.05.2013 - 14:59
fonte

3 risposte

5

Penso che la tua intenzione nel rendere definitive tutte le variabili locali sia una buona pratica, ma farlo in modo implicito (cioè non esplicitamente con la parola chiave finale) è una cattiva idea.

Piuttosto che preoccuparti della leggibilità per te stesso, pensa ai futuri manutentori del tuo codice: qualcuno si aspetterà ragionevolmente che la riassegnazione di un campo senza la parola chiave finale non verrà compilata?

Sembra che tu possa automatizzare l'inclusione delle parole chiave finali in Eclipse durante il codice generazione, ma l'utilizzo di un controllo di stile per applicarlo potrebbe evidenziare più falsi positivi di quanti ne valga la pena.

Se sei aperto ad esplorare altri linguaggi e paradigmi, molte lingue funzionali predefinito su immutabilità .

    
risposta data 29.05.2013 - 15:39
fonte
2

La soluzione migliore che posso immaginare per questo problema è di avere la parola chiave final nei file di origine come normale, ma avere il mio editor nasconderli e evidenziare invece tutte le dichiarazioni senza final keyword. Questo mi darebbe esattamente quello che voglio, e i file sarebbero ancora semplici Java.

Purtroppo, non conosco alcun IDE che supporti questo. Per Eclipse, c'è un bug che propone questo miglioramento .

    
risposta data 29.05.2013 - 17:51
fonte
-1

Penso che sia necessario leggere lo scopo di final e interrompere l'uso improprio di esso. link L'intero punto di final è se vuoi rendere pubblico un membro di una classe (ancora costante) piuttosto che nasconderlo dietro un getter, o se vuoi mettere un metodo in una classe e rendere impossibile la sovrascrittura, oppure se vuoi rendere una classe inestendibile. L'utilizzo di final per una manciata di variabili in una funzione locale è un abuso totale del linguaggio (e non ti darà un magico incremento delle prestazioni come pensi, dal momento che devono ancora andare nello stack di funzioni!). Ciò che avrebbe senso fare è creare una classe che contenga tutte le tue variabili final e fare semplicemente riferimento alle tue funzioni locali o creare final delle variabili globali. E per aggiungere la parola chiave final , avvia tutte le variabili con fnx_variablename e usa search and replace per trasformare fnx_variablename in final fn_variablename; dovresti usare un qualche tipo di convenzione per dimostrare che sono definitivi, dopotutto.

    
risposta data 30.05.2013 - 01:21
fonte

Leggi altre domande sui tag