Chciał bym poznać wasze zdanie na temat użycia final w metodzie zarówno jako zmienna w bloku metody jak i parametr w sygnaturze. Google pozostawia kwestie otwartą. Z jednej strony final w dłuższej metodzie dla zmiennej jest wskazaniem dla użytkownika i nie zmusza go do chodzenia po kodzie i sprawdzania. Z drugiej nie ciekawie wygląda. Jak wybierzemy opcję, że w długich metodach piszemy, a w krótkich nie to narażamy się na opinie bycia niekonsekwentnym. Z kolei jako parametr, sam nie wiem. Raczej należy unikać inicjowania w bloku metody parametru nowymi wartościami, więc po co final w ogóle. Pomijam fakt, iż są wyjątkowe sytuacje wpływające dość wyraźnie na performancę (jak np konkatenacja stringów z final jako zmienna), kod optymalizowany i tak jest brzydki.
https://stackoverflow.com/questions/4279420/does-use-of-final-keyword-in-java-improve-the-performance
Kiedyś czytałem że Doug Lea miał zwyczaj walenia wszędzie gdzie się da final - ale były to czasy mniej inteligentnych kompilatorów.
dla przykładu:
private void write(final FileObject file,
final Map.Entry<Boolean, List<String[]>> perFileData,
final List<String[]> elementData,
final int[] index) throws IOException {
try (final BufferedWriter bufferedWriter = new BufferedWriter(file.openWriter())) {
final boolean defaultBranching = perFileData.getKey();
final BranchWritingProcedure<List<String[]>> procedure = getProcedures(bufferedWriter, elementData, index);
if (defaultBranching) {
procedure.proceedWithDefaultBranching(elementData);
} else {
procedure.proceedWithCustomBranching(elementData);
}
}
}
i bez
private void write(FileObject file,
Map.Entry<Boolean, List<String[]>> perFileData,
List<String[]> elementData,
int[] index) throws IOException {
try (BufferedWriter bufferedWriter = new BufferedWriter(file.openWriter())) {
boolean defaultBranching = perFileData.getKey();
BranchWritingProcedure<List<String[]>> procedure = getProcedures(bufferedWriter, elementData, index);
if (defaultBranching) {
procedure.proceedWithDefaultBranching(elementData);
} else {
procedure.proceedWithCustomBranching(elementData);
}
}
}
}
Jak wy to robicie? Gdzie leży złoty środek?