Хорошо, я признаю, что не знаю о ключевом слове final
.Должен сказать, что я не понимаю его полезности:
Если вы переназначаете параметр внутри метода, final
или нет, объект остается неизменным, конечно же
Если вместо этого вы изменяете неизменный объект, final
или нет, объект изменяется и вне метода.
Кажется, единственное, что параметрс final
сделать так, что он не может быть переназначен только внутри метода.
Я должен сказать, что я делаю что-то подобное много раз:
public List<MyBean> findByNation(String nation) {
if (nation != null) {
nation = nation.toUpperCase();
} else {
nation = "";
}
[...]
}
или
public List<Date> findConfirmedDates(Date start, Date end) {
if (end == null) {
end = new Date();
}
}
или
public String findFilteredSql(String queryFilter, SearchBean searchBean) {
if (searchBean.getSupplierId() != null) {
queryFilter += " JOIN SUPPLIER_COMMODITY sc ON sc.SUPPLIERID = v.SUPPLIERID ";
}
[...]
}
или
public static String format(BigDecimal val, Locale locale, int scale) {
if (val == null) {
return "-";
}
val = valLocal.subtract(BigDecimal.ONE);
val = val.multiply(NumberUtility.BigDecimal100);
[...]
}
Да, в университете я узнал, что если я создаю новую переменную вместо перезаписистарый, скорость программы улучшена (я не очень хорошо помню, мне кажется, что процессор и регистры каким-то образом задействованы ...).В любом случае, это микрооптимизация, полезная для библиотек C или Fortran, которые выполняют числовые вычисления.
ИМХО, это намного более читабельно, как я написал методы выше, и извините за final
.
Поэтому я не нахожу полезность final
в этих случаях.Более того, я не считаю это полезным.Я думаю, что я приму пример № 1 в вопросе, и я просто отключу предупреждение об Eclipse и не добавлю это ключевое слово с возможной полезностью.