Por que devo usar a palavra-chave "final" em um parâmetro de método em Java?
Não consigo entender ondefinal
palavra-chave érealmente útil quando usado em parâmetros de método.
Se excluirmos o uso de classes anônimas, legibilidade e declaração de intenção, isso parecerá quase inútil para mim.
A imposição de que alguns dados permaneçam constantes não é tão forte quanto parece.
Se o parâmetro for um primitivo, ele não terá efeito, pois o parâmetro é passado para o método como um valor e a alteração não terá efeito fora do escopo.
Se estamos passando um parâmetro por referência, a própria referência é uma variável local e se a referência for alterada de dentro do método, isso não teria nenhum efeito fora do escopo do método.
Considere o exemplo de teste simples abaixo. Este teste é aprovado, embora o método tenha alterado o valor da referência fornecida, ele não tem efeito.
public void testNullify() {
Collection<Integer> c = new ArrayList<Integer>();
nullify(c);
assertNotNull(c);
final Collection<Integer> c1 = c;
assertTrue(c1.equals(c));
change(c);
assertTrue(c1.equals(c));
}
private void change(Collection<Integer> c) {
c = new ArrayList<Integer>();
}
public void nullify(Collection<?> t) {
t = null;
}