Final no parametro de um método

Galera, quando colocamos no parametro de um método “final” quais ganhos podemos ter, alem de garatir claro que aquele valor não poderá ser modificado dentro do método?

ex:

public metodo(final Integer parametro){
...
}

te mais.

cara essa de vantagem é muito relativo,depende da regra de negocio de cada um,final so q dizer q é uma constante ou seja o valor nao muda,esse parametro ai deve receber algo q fique fora do objeto(statico)como uma referencia por exemplo !!!

[quote=afamorim]Galera, quando colocamos no parâmetro de um método “final” quais ganhos podemos ter, além de garantir claro que aquele valor não poderá ser modificado dentro do método?

ex:

public void metodo(final Integer parametro){
...
}

te mais.[/quote]

A vantagem é que isso costuma eliminar alguns erros de lógica que costumamos cometer em programas, do tipo:

public void metodo(final String x){
    x = "teste";  // erro de compilação
}
...
String q = "bla ble bli";
var.metodo (q);
System.out.println (q); // deve ser impresso "bla ble bli", não "teste". 

Eu perguntei para um gerente de projetos que forçou os seus programadores a usar sempre final, e ele disse que isso eliminou uma série de erros estúpidos e tolos que os programadores faziam (do tipo “reaproveitar variáveis” ou “achar que os métodos podiam modificar os seus parâmetros por referência”).

Thingol, se me permite, vou fazer uma correção:

[code]public class A{

public void metodo(String x){ x= “teste” ; }
public static void main (String []xxx){
String q = “vatapa”;
A a = new A();
a.metodo(q);
System.out.println(q);
}
}[/code]

Ainda imprime vatapa.

Sim senhor, mas é mais fácil forçar aquele programador meia-boca a botar “final” em todos os parâmetros que fazer entrar na cabeça que:

  • Strings são imutáveis;
  • Não ficar reutilizando variáveis e parâmetros sem saber por quê;
  • As referências são passadas por valor e não por referência (que é o caso que você mostrou aí).

Pondo “final” em todos os parâmetros evitamos ter de fazer o tal programador meia-boca a entender esses profundos conceitos da vida (sendo que eles não conseguem distinguir a mão esquerda da direita :stuck_out_tongue: )

no exemplo citado, por si so Integer e String sao classes com o modificador final.
E a ideia tb de ter o uso do modificador final dentro do metodo cai no assunto de classe interna… que vc pode usar a variavel… e uma variavel no argumento ela é local… e variaveis locais so podem receber o modificador final além dele mais nenhum :D.

Valeu galera, estava até lendo a matéria sobre Programação a prova de balas da Java Magazine desse mês e fala sobre isso, descobri que até método pode ser final, coisa que não lembrava mais, evitando assim que uma classe filha sobrescreva um método e evitando assim muitos problemas.

Realmente muito bom, só queria confirmar se teria ganho de performance, tipo não alocar mais memória que o necessário para um atributo.

Mais acho que não, é questão de segurança no código mesmo.

valeu ai todo mundo!!