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;
}

questionAnswers(12)

yourAnswerToTheQuestion