A this
palavra-chave é usada principalmente em três situações. O primeiro e mais comum é nos métodos setter para desambiguar referências de variáveis. A segunda é quando há a necessidade de passar a instância atual da classe como argumento para um método de outro objeto. A terceira é uma maneira de chamar construtores alternativos de dentro de um construtor.
Caso 1: Usando this
para desambiguar referências de variáveis. Nos métodos Java setter, geralmente passamos um argumento com o mesmo nome da variável de membro privado que estamos tentando definir. Em seguida, atribuímos o argumento x
a this.x
. Isso deixa claro que você está atribuindo o valor do parâmetro "name" à variável de instância "name".
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
Caso 2: usando this
como argumento passado para outro objeto.
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
Caso 3: Usando this
para chamar construtores alternativos. Nos comentários, trinithis apontou corretamente outro uso comum de this
. Quando você tem vários construtores para uma única classe, pode this(arg0, arg1, ...)
chamar outro construtor de sua escolha, desde que faça isso na primeira linha do construtor.
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
Eu também vi this
usado para enfatizar o fato de que uma variável de instância está sendo referenciada (sem a necessidade de desambiguação), mas esse é um caso raro na minha opinião.
this(arg1, arg2, ...)
dentro de um construtor.this
que eu esqueci, então adicionei à minha resposta. Não vejo nada de errado nisso, porque o resultado final é uma resposta melhor em geral, que é precisamente o objetivo do SO. Também tento dar crédito sempre que possível, como fiz no caso de trinithis.this
só é usada se a desambiguação for realmente necessária, como no meu exemplo de setter acima. Os estilos de codificação e as "práticas recomendadas" podem variar bastante, dependendo de quem você pergunta, é claro, mas, em geral, recomendo escolher padrões razoáveis e segui-los. A consistência, mesmo que apenas internamente em uma única base de código, ajuda bastante na legibilidade e manutenção.O segundo uso importante de
this
(além de ocultar com uma variável local, como muitas respostas já dizem) é ao acessar uma instância externa de uma classe não estática aninhada:fonte
Você só precisa usar
this
- e a maioria das pessoas usa - quando há uma variável local sobreposta com o mesmo nome. (Métodos setter, por exemplo.)Obviamente, outro bom motivo para usar
this
é que ele faz com que o intellisense apareça nos IDEs :)fonte
A única necessidade de usar o
this.
qualificador é quando outra variável no escopo atual compartilha o mesmo nome e você deseja consultar o membro da instância (como William descreve). Além disso, não há diferença de comportamento entrex
ethis.x
.fonte
this.x
para tornar seu código ler um pouco mais claramente, também, a manutenção / legibilidade do código também é um fator que você deve considerar ..."this" também é útil ao chamar um construtor de outro:
fonte
this
é útil no padrão do construtor.fonte
Há muitas boas respostas, mas há outra razão muito menor para colocar em
this
todo lugar. Se você tentou abrir seus códigos-fonte a partir de um editor de texto normal (por exemplo, bloco de notas, etc.), o usothis
será muito mais claro de se ler.Imagina isto:
Isso é muito claro para ler com qualquer IDE moderno, mas será um pesadelo total ler com um editor de texto comum.
Você lutará para descobrir onde
foo
reside, até usar a função "localizar" do editor. Então você gritará pelogetStringFromSomewhere()
mesmo motivo. Por fim, depois de esquecer o ques
é, issobar = s
lhe dará o golpe final.Compare com isso:
foo
é uma variável declarada na classe externaHello
.getStringFromSomewhere()
é um método declarado na classe externa também.bar
pertence àWorld
classe es
é uma variável local declarada nesse método.Obviamente, sempre que você cria algo, você cria regras. Portanto, ao projetar sua API ou projeto, se suas regras incluírem "se alguém abrir todos esses códigos-fonte com um bloco de notas, ele ou ela deve dar um tiro na cabeça", você estará totalmente bem em não fazer isso .
fonte
A menos que você tenha nomes de variáveis sobrepostos, é realmente apenas uma questão de clareza ao ler o código.
fonte
this
palavra-chave quando não é necessária, é apenas um código padrão, tornando o código mais difícil de ler.this
NÃO torna o código mais difícil de ler lmao.A resposta de @William Brendel forneceu três casos de uso diferentes de maneira agradável.
Caso de uso 1:
Página de documentação java oficial sobre este fornece mesmos casos de uso.
Abrange dois exemplos:
Usando isso com um campo e Usando isso com um construtor
Caso de uso 2:
Outro caso de uso que não foi citado nesta postagem:
this
pode ser usado para sincronizar o objeto atual em um aplicativo multithread para proteger a seção crítica de dados e métodos.Caso de uso 3:
A implementação do padrão Builder depende do uso de
this
para retornar o objeto modificado.Consulte este post
Mantendo o Construtor em Classe Separada (Interface Fluente)
fonte
O Google apareceu uma página no site da Sun que discute isso um pouco.
Você está certo sobre a variável;
this
pode realmente ser usado para diferenciar uma variável de método de um campo de classe.No entanto, eu realmente odeio essa convenção. Dar duas variáveis diferentes nomes literalmente idênticos é uma receita para bugs. Eu prefiro algo como:
Mesmos resultados, mas sem chance de um bug ao qual você se refere acidentalmente
x
quando realmente pretendia se referirx
.Quanto a usá-lo com um método, você está certo sobre os efeitos; você obterá os mesmos resultados com ou sem. Você pode usá-lo? Certo. Você deveria usá-lo? Depende de você, mas considerando que pessoalmente acho que é uma verbosidade sem sentido que não adiciona nenhuma clareza (a menos que o código esteja repleto de instruções de importação estáticas), não estou inclinado a usá-lo.
fonte
A seguir estão as maneiras de usar a palavra-chave 'this' em java:
this
palavra-chave para referenciar variáveis de instância de classe atualthis()
para invocar o construtor de classe atualthis
palavra-chave para retornar a instância de classe atualthis
palavra-chave como parâmetro de métodohttps://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
fonte
quando existem duas variáveis, uma variável de instância e outra variável local com o mesmo nome, usamos isso. para referir o objeto em execução atual para evitar o conflito entre os nomes.
fonte
this
é uma referência ao objeto atual. É usado no construtor para distinguir entre a variável de classe local e a atual que tem o mesmo nome. por exemplo:this
também pode ser usado para chamar um construtor de outro construtor. por exemplo:fonte
Haverá alguma diferença se eu usar "x" em vez de "this.x" em alguns dos métodos?
Geralmente não. Mas às vezes faz diferença:
Se eu apenas usar "method ()", não será, por padrão, aplicado ao objeto atual?
Sim. Mas, se necessário,
this.method()
esclarece que a chamada é feita por esse objeto.fonte
this
não afeta o código resultante - é o operador de tempo de compilação e o código gerado com ou sem será o mesmo. Quando você precisa usá-lo, depende do contexto. Por exemplo, você deve usá-lo, como disse, quando tiver uma variável local que oculta a variável de classe e desejar consultar a variável de classe e não a local.edit: por "o código resultante será o mesmo", claro, quando alguma variável no escopo local não oculta a que pertence à classe. portanto
o código resultante de ambos os métodos será o mesmo. A diferença será se algum método declarar variável local com o mesmo nome
fonte
Com relação à pergunta dos posts e dbconfessions de William Brendel , referente ao caso 2 . Aqui está um exemplo:
Eu já vi isso usado, ao criar relações pai-filho com objetos. No entanto, observe que é simplificado por uma questão de brevidade.
fonte
A palavra-chave “This” em java é usada para referenciar objetos de classe atuais.
Existem 6 usos da palavra-chave "this" em java
ref: https://stacktraceguru.com/java/this-keyword-in-java
fonte
Para garantir que os membros do objeto atual sejam usados. Nos casos em que a segurança do encadeamento é uma preocupação, alguns aplicativos podem alterar os valores do membro de objetos incorretos; por esse motivo, isso deve ser aplicado ao membro para que o valor correto do membro do objeto seja usado.
Se o seu objeto não estiver preocupado com a segurança do encadeamento, não há motivo para especificar qual valor do membro do objeto será usado.
fonte