Zajmuję się programowaniem na Androida i uczyłem się o intencjach, kiedy zobaczyłem konstruktora, który moim wyszkolonym w C # umyśle wydawał się funky. Wezwanie brzmiało:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Oba parametry są dla mnie nowe. W jaki sposób istnieje statyczne „.this” poza nazwą klasy? Czy to sprawa Javy czy Androida? Zakładam, że to to samo, co zwykłe powiedzenie „tego”, ponieważ jestem w kontekście CurrentActivity
, ale nie rozumiem, w jaki sposób „to” może być odwołane z samej nazwy klasy. Również. ".Class" wygląda tak, jakby służył do refleksji, którą znam w C #, ale każdy wgląd w to również byłby mile widziany.
Dzięki.
this
jest zawsze najbardziej wewnętrzną klasą.this
tak bardzo podobna do JavaScriptthis
? Wydaje mi się, że to właśnie dostajesz, nie mając funkcji pierwszej klasy ani lambd :-)Pojedynczo:
Pierwsza konstrukcja jest nazywana kwalifikowaną this . Zadaniem składni jest sytuacja, w której znajdujesz się w klasie wewnętrznej (zwykle jest to anonimowa klasa wewnętrzna) i chcesz odwołać się
this
do klasy zewnętrznej, a niethis
do (anonimowej) klasy wewnętrznej. „Kwalifikowane to” może być używane tylko w kontekście, w którymthis
byłoby to niejednoznaczne. Cytuje JLS "Jest to błąd czasu kompilacji, jeśli wyrażenie występuje w klasie lub interfejsie, który nie jest wewnętrzną klasą klasy T lub T".Druga konstrukcja nosi nazwę a i
class literal
jest sposobem odwoływania się do obiektu Class, który reprezentuje ten typ. Może być używany w dowolnym kontekście.źródło
qualified this
nie zclass literal
. Rozszerzyłem moją odpowiedź, aby była jaśniejsza.Składnia „Classname.this” dotyczy klas wewnętrznych. Jeśli chcesz odwołać się do otaczającej instancji typu „Outerclass”, zrób to jako „Outerclass.this”.
NextActivity.class to po prostu obiekt Class, który opisuje klasę „NextActivity”.
źródło
NextActivity.class
w java oznaczatypeof(NextActivity)
w C #źródło
ClassName.this
służy do odwoływania się do bieżącego wystąpienia klasy zewnętrznej z klasy wewnętrznej.źródło
jest używane w klasach zagnieżdżonych do odwoływania się do bieżącej instancji klasy otaczającej, ponieważ słowo kluczowe `this 'odnosi się do instancji klasy zagnieżdżonej.
źródło
Jest to mylące tylko dlatego, że kiedy używasz " MainActivity.this ", wydaje się, że odnosisz się do klasy, a nie do obiektu. W rzeczywistości, kiedy używasz "this", zawsze odnosisz się do aktualnego obiektu, jak stwierdza dokumentacja java se:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Jest to po prostu osobliwe pod względem składniowym.
źródło