Gostaria de saber qual é o função do final, sou novato em JAVA
public void setEmployees(final Collection employees) {
this.employees = employees;
}
Gostaria de saber qual é o função do final, sou novato em JAVA
public void setEmployees(final Collection employees) {
this.employees = employees;
}
pergunta de certificação hein…
eu não lembro agora mas siginifica q ou seus valores não podem ser alterados ou a referência não pode ser alterada…
alguém aí ???
Exatamente, é o que se pode chamar de constante.
em c vc usa define e talz… em java vc declara com final. ex:
final int num = 3;
num vai ser um inteiro constante de valor 3.
Depois de atribuído um valor pra uma variável esse valor não pode ser modificado.
Abraços,
Valeu Galera!!!
Pode ser três coisas:
Classes final não podem ser extendidas (herdadas).
Métodos final não podem ser sobrescritos.
Variáveis final não podem ter seus valores alterados após a primeira atribuição.
Flw
Pode ser três coisas:Classes final não podem ser extendidas (herdadas).
Métodos final não podem ser sobrescritos.
Variáveis final não podem ter seus valores alterados após a primeira atribuição.Flw
[ERRO]Mas vc pode alterar a referência…não de um primitivo (int) mas de um Integer vc pode…pelo q me lembro.[ERRO]
disse besteira…é o inverso…
Lembrando que caso o final seja aplicado ao parametro de um método, para um tipo de objeto, a referencia é final, imutavél, mas o objeto em si pode sofrer alterações dentro deste método…
public void alterar (final Pessoa p){
//altera o nome
p.setNome("Teste");
Pessoa p1 = new Pessoa();
p = p1; // aqui que o final faz efeito...
}
Pode ser três coisas:Classes final não podem ser extendidas (herdadas).
Métodos final não podem ser sobrescritos.
Variáveis final não podem ter seus valores alterados após a primeira atribuição.Flw
[ERRO]Mas vc pode alterar a referência…não de um primitivo (int) mas de um Integer vc pode…pelo q me lembro.[ERRO]
disse besteira…é o inverso…
A referência não…mas valores dentro do objeto sim.
Flw
Só é possível se os objetos forem mutáveis.
class X{
int i;
public int show(){ return i; }
public void doIt(){ i++; }
}
public class A{
public void add(X x){
x.doIt();
// x = null; // permitido
System.out.println(x.show());
}
public void addFinal(final X x){
x.doIt();
// x = null; // proibido!
System.out.println(x.show());
}
public static void main(String [] args){
A a = new A();
X x = new X();
a.add(x);
a.addFinal(x);
}
}
Veja só
no addFinal, vc não pode fazer x = outraCoisa pois isso gera um erro em tempo de compilação.
mas vc pode mudar o estado interno do objeto que vc passou como argumento via algum método.
nesse exemplo vc tem impresso 1 e 2
No fim das contas vc garante que, se vc passou um objeto como parametro para um método, esse objeto não será substituido por outro lá dentro.
Isso não causaria problemas "la fora", mas dentro de um método grande evita que vc reuse uma variavel no lugar errado. Ja vi codigos q faziam
metodo(objeto x){
...
for(;x.hasChildren();x = x.getChildren()){ qtdeChildren++;}
...
x.algumaCoisa();
...
}
Imagine que x (na linha x.algumaCoisa) deveria ser o objeto que foi passado como argumento. Se o parametro não for final, algum programador descuidado dentro de um método gigante pode atribuir outro objeto nessa referência para algum fim util e melar a parada toda (geralmente é quem tem preguiça de declarar variaveis) e ai vc pode demorar dias pra descobrir (diretamente proporcional ao tamanho e obscuridade do método).
Só é possível se os objetos forem mutáveis.
Han?
Só é possível se os objetos forem mutáveis.
Han?
Só é possível se os objetos permitirem a modificação de seu estado interno por métodos externos. Objetos que não permitem isso são chamados imutáveis, ou seja, somente o próprio objeto pode alterar seu estado.
Só é possível se os objetos forem mutáveis.
Han?
Só é possível se os objetos permitirem a modificação de seu estado interno por métodos externos. Objetos que não permitem isso são chamados imutáveis, ou seja, somente o próprio objeto pode alterar seu estado.
Ah sim…mas ai jah eh uma outra conversa.
Uma coisa leva a outra.
Mas vlw a colocação.
Flw
Só um exemplo:
public class Classe
{
public static void main(String []args)
{
final Object objeto = new Object();
// objeto -> não possui metodos, nem atributos nos quais posso mudar seu estado.
}
}
Errei na colocação acima, imutáveis não permitem nem alterar seu estado interno. Caso haja uma operação, ele retornará uma cópia de si mesmo com a operação executada, usando outra referência de memória.
Blz, tipo isso aki:
public class Classe
{
public static void main(String []args)
{
final String str = "aaaa";
String str2 = str.replace('a', 'b');
}
}
Eu posso utilizar o replace porque, eu estou recebendo uma nova instancia de String.