Recentemente ho riscontrato una situazione in un progetto Java in cui ho scritto un blocco come questo:
String user = System.getProperty("user.home").toUpperCase();
user = user.substring(user.lastIndexOf(File.separator) + 1);
final String path1 = "C:\first\path";
final String path2 = "C:\second\path";
final String uniquePath = "C:\users\" + user + "\unique\path";
Mi sto solo abituando a contrassegnare le variabili come final per lo stile, ma non sono sicuro di come gestire questo tipo di esempio. A quanto ho capito, final è spesso usato non solo per impedire che un valore venga modificato, ma per indicare al lettore che la variabile è immutabile. In questo esempio, qualcuno vede che path1 , path2 e uniquePath non cambieranno e questo cambia radicalmente il modo in cui pensano a tali variabili.
La mia preoccupazione è che, nell'esempio sopra, i percorsi siano chiaramente final , e user chiaramente no. Non è troppo difficile (penso) per capire che user probabilmente non verrà manipolato, e l'unica ragione per cui non è anche final è perché non può essere ottenuto in una sola espressione. Tuttavia, se vedessi questo codice, sarebbe davvero difficile per me raggruppare mentalmente user con i percorsi. Ovviamente il coder ha voluto indicare quali variabili erano final e non hanno contrassegnato user .
Sembra quindi che qualcosa del genere renderebbe le cose più chiare:
String temp = System.getProperty("user.home").toUpperCase();
temp = temp.substring(temp.lastIndexOf(File.separator) + 1);
final String user = temp;
final String path1 = "C:\first\path";
final String path2 = "C:\second\path";
final String uniquePath = "C:\users\" + user + "\unique\path";
Ma non sono sicuro che questo valga lo spazio extra e la variabile necessaria.
Esiste un consenso su quale di questi approcci è una pratica migliore? C'è un'opzione migliore che non ho considerato?