Final

É errado usar final para contruir uma classe ou declarar parametros como final… por exemplo

public final class EstoqueDB{
private metodo(final String str){
}
}

Todo mundo tira sarro do meu codigo aqui na empresa… ta errado mesmo ?

Depende do seu objetivo.

A palavra-chave final em Java serve para atribuir valores constantes, ou seja, que a partir da sua declaração, seus valores não poderão mais serem alterados.

Ex.: public static final NUMERO_VEZES = 100;

Não é uma boa prática de programação usar final na declaração de classes ou métodos.

No seu exemplo de método, se você usar final String, o valor não poderá ser alterado dentro do método e nem passado para os demais, então, pra quê usar?

[]'s

1 curtida

Justamente pra isso… pra eu saber que justamente não é pra mudar.
Eu olho para o codigo e vejo que isso nunca muda
eu olho pra classe e sei que ninguem extende !

ta errado poensar dessa forma ?

ronildo,

Para se programar em Java, você tem que seguir uma série de requisitos, de padrões de como escrever seu código. Mas, você programa da maneira que bem quiser, porém, no dia em que alguém for mecher no teu programa ele vai perguntar porque você usava final para declarar classes e/ou métodos.

Não é uma boa prática de programação escrever seus códigos desta maneira, mas se você acha melhor, pode usar. Por isso que seus amigos tiram “sarro” do seu código. Porque ele usam a convensão correta.

[]'s

uma classe com atributo final significa que ela não pode ser herdada por nenhuma outra classe

não ha nada de errado nisso

agora um parametro final é desnecessario e acho que nem compila!
todos os parametros em java são por valor!

[quote=“microfilo”]uma classe com atributo final significa que ela não pode ser herdada por nenhuma outra classe

não ha nada de errado nisso

agora um parametro final é desnecessario e acho que nem compila!
todos os parametros em java são por valor![/quote]

Mas pra que atribuir a uma classe a palavra-chave final se um dos pontos mais fortes do Java é a herança?!?1 :maestro:

Não há da de errado em declarar uma classe como final.

A classe String é final justamente p/ evitar que ela seja herdada por outra…se você acha que sua classe tem alguma particularidade que faz com que seja indesejável que ela seja herdada, não há por que de não declará-la final.

Agora…talvez um approach melhor seria declarar os métodos que você acha que não devem ser redefenidos p/ final…mas se você acha que a classe inteira não deve ser herdada, você está certo.

Você pode até estar cometendo um erro de design (Ou não…), mas é correto declarar a classe como final p/ que ela não seja herdada e há exemplos disso inclusive nas classes da API da Sun.

Então…retorne a chacota p/ eles :slight_smile:

(E talvez tire esse final dos parâmetros…ou me ensine a usar pq isso eu nunca vi! :D)

Até +

!@#$%@ Que o codigo compila eu tenho certa ! LOGICO
O problema é ! é uma boa pratica de programação ?
Porque nao seria ? já que parametros sao justamente final…
ou seja… eu nao passo um parametro pra depois mudar ele

Poderia até ser, o Java é free, então, está aberto a mudanças, então, porque você não envia um e-mail para a Sun mudar o padrão dela a partir da sua idéia?!

Não é uma boa prática de programação porque quem segue essa prática, não usa esses conceitos, entendeu?!

[]'s

[quote=“Reifel”][quote=“microfilo”]uma classe com atributo final significa que ela não pode ser herdada por nenhuma outra classe

não ha nada de errado nisso

agora um parametro final é desnecessario e acho que nem compila!
todos os parametros em java são por valor![/quote]

Mas pra que atribuir a uma classe a palavra-chave final se um dos pontos mais fortes do Java é a herança?!?1 :maestro:[/quote]

reifel, eu nunca passei por isso, mas há casos que para até a propria segurança de um sistema, a classe ou um método dela tem que ser final

É um certo egoismo pensar assim…
Não há porque impedir que alguém extenda sua classe, exceto que esta realmente exija o final por razões de segurança.
Se não precisar, não coloque, poias assim você poderá estar poupando trabalho de alguém que precise adicionar uma função na sua classe…
Ele não precisará reescrever tudo…

não seria questão de egoismo, seria questão de segurança…

por exemplo, há várias classes do java que são final, pq se o programador mexer nela, pode ferrar o funcionamento da JVM dele

tipo… n tem problema nenhum em se declarar a classe como final… eh uma maneira explicita de se arfimar q a classe n deve ser extenida, e caso vc se confunda, dai o compilador vai te alertar (doo jeito q vcs tao pensando, seria errado declarar uma variavel como final :wink: )

e qnto ao parametro como final… isso soh nao eh certo, como em alguns casos eh obrigatorio, se vc estiver usando uma classe interna anonima, e vc quiser usar um objeto dentro da classe interna anonima, vc obrigatoriamente deve declarar o objeto como final!!!

facam um teste:

public void teste(String x){
 (new Thread(){
  for (int i = 0; i < 100; i++) System.out.println(x);
 }).start();
}

vai dar erro, a solucao seria essa:

public void teste(final String x){
 (new Thread(){
  for (int i = 0; i < 100; i++) System.out.println(x);
 }).start();
}

e vc soh n pode por outra string no lugar de x, vc pode usar a variavel x normalmente, se fosse outro objeto qualquer, vc poderia usar os metodos normalmente, a unica coisa q vc n poderia fazer eh por outro objeto no lugar… isso pq qndo vc ta chamando um metodo, mesmo q va alterar algo no objeto, vc n esta mudando a referencia, e sim o objeto…

1 curtida