Estou fazendo programação para Android e aprendendo sobre Intents, quando vi um construtor que, para minha mente treinada em C #, parecia descolado. A chamada foi:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Ambos os parâmetros são novos para mim. Como existe um ".this" estático fora de um nome de classe? Isso é coisa do Java ou do Android? Estou assumindo que é o mesmo que dizer "isso", já que estou no contexto de CurrentActivity
, mas não entendo como o "isso" pode ser evitado no próprio nome da Classe. Além disso. O ".class" parece ser usado para reflexão, com o qual estou familiarizado em C #, mas qualquer ideia sobre isso seria bem-vinda.
Obrigado.
this
é sempre a classe mais interna.this
tão parecido com o JavaScriptthis
? Eu acho que é isso que você ganha por não ter funções de primeira classe ou lambdas :-)Um por vez:
A primeira construção é chamada de qualificado this . O objetivo da sintaxe é no caso em que você está em uma classe interna (normalmente uma classe interna anônima) e deseja fazer referência a
this
da classe externa em vez dethis
da classe interna (anônima). O "qualificou isso" só pode ser usado em um contexto emthis
que seria ambíguo. A citação do JLS "É um erro em tempo de compilação se a expressão ocorre em uma classe ou interface que não é uma classe interna da própria classe T ou T".A segunda construção é chamada de
class literal
é a maneira de fazer referência ao objeto Class que representa aquele tipo. Ele pode ser usado em qualquer contexto.fonte
qualified this
nãoclass literal
. Ampliei minha resposta para tornar isso mais claro.A sintaxe "Classname.this" é para classes internas. Se você quiser se referir à instância envolvente do tipo "Outerclass", faça-o como "Outerclass.this".
NextActivity.class é simplesmente o objeto Class que descreve a classe "NextActivity".
fonte
NextActivity.class
em java significatypeof(NextActivity)
em C #fonte
ClassName.this
é usado para fazer referência à instância atual de uma classe externa de uma classe interna.fonte
é usado em classes aninhadas para se referir à instância atual da classe envolvente, uma vez que a palavra-chave `this 'se refere à instância da classe aninhada.
fonte
É confuso apenas porque quando você usa " MainActivity.this ", parece que você está se referindo à classe e não ao objeto. Na realidade, quando você usa "this", está sempre se referindo ao objeto atual, como afirma a documentação do Java:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
É apenas sintaticamente peculiar.
fonte