O modificador final em métodos e variáveis
O grande poder deste modificador é ser imutável!
métodos
Pode ser aplicado em um método com o intuito de não poder ser sobreescrito em herança.
package certificacao; public class Calculadora { public final double soma(double... values) { double resultado = 0d; if (values != null) { for (double d : values) { resultado += d; } } return resultado; } }
package certificacao; public class CalculadoraCientifica extends Calculadora { // NAO COMPILA - o metodo soma nao pode ser sobrescrito public double soma(double... values) { double resultado = 0d; // outra regra return resultado; } }
variáveis
Pode ser aplicado em um atributo de uma classe/método ou como um argumento de um método.
- Como atributo de uma classe (inicialização)
package certificacao; import java.math.BigDecimal; public class Circulo { // NAO COMPILA - a variavel precisa ser inicializada private final BigDecimal Pi; }
- Como atributo de uma classe em um método (atribuição)
package certificacao; import java.math.BigDecimal; public class Circulo { private final BigDecimal Pi = new BigDecimal(3.14); public BigDecimal calculaArea(BigDecimal raio) { // NAO COMPILA - a variavel nao pode atribuir um outro valor Pi = new BigDecimal(3.14); return Pi.multiply(raio.pow(2)); } }
- Como um parâmetro de um método
package certificacao; import java.math.BigDecimal; public class Quadrado { private BigDecimal lado; public void setLado(final BigDecimal l) { // NAO COMPILA - a variavel nao pode atribuir um outro valor l = l.multiply(BigDecimal.ONE); this.lado = l; } }
algo engraçado
No dicionário modificador: algo que modifica!!
– Então, que raio de modificador final é esse ?! 🙂
Comentem, estendam o assunto… Compartilhem =)