Saya melakukan pemrograman Android dan belajar tentang Intents, ketika saya melihat konstruktor yang, bagi pikiran saya yang terlatih C #, tampak funky. Panggilannya adalah:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
Kedua parameter tersebut baru bagi saya. Bagaimana cara menonaktifkan ".this" statis dari Nama Kelas? Apakah ini perangkat Java atau Android? Saya berasumsi bahwa itu sama dengan hanya mengatakan "ini", karena saya berada dalam konteks CurrentActivity
, tetapi saya tidak mengerti bagaimana "ini" dapat dipanggil dari nama Kelas itu sendiri. Juga. ".Class" sepertinya digunakan untuk refleksi, yang saya kenal di C #, tetapi wawasan apa pun tentang ini akan disambut juga.
Terima kasih.
this
selalu merupakan kelas terdalam.this
sangat mirip dengan JavaScriptthis
? Saya rasa itulah yang Anda dapatkan karena tidak memiliki fungsi kelas satu atau lambda :-)Satu per satu:
Konstruksi pertama disebut ini memenuhi syarat . Tujuan sintaks ini adalah jika Anda berada di kelas dalam (biasanya kelas dalam anonim) dan Anda ingin mereferensikan
this
kelas luar daripada kelasthis
dalam (anonim). Kata "memenuhi syarat ini" hanya dapat digunakan dalam konteks yangthis
akan menjadi ambigu. Kutipan JLS "Ini adalah kesalahan waktu kompilasi jika ekspresi terjadi di kelas atau antarmuka yang bukan kelas dalam dari kelas T atau T itu sendiri".Konstruksi kedua disebut a
class literal
adalah cara untuk mereferensikan objek Kelas yang mewakili tipe itu. Ini dapat digunakan dalam konteks apa pun.sumber
qualified this
bukan dariclass literal
. Saya telah memperluas jawaban saya untuk membuatnya lebih jelas.Sintaks "Classname.this" adalah untuk kelas dalam. Jika Anda ingin merujuk ke contoh penutup dari tipe "Outerclass" maka Anda melakukannya sebagai "Outerclass.this".
NextActivity.class hanyalah objek Kelas yang mendeskripsikan kelas "NextActivity".
sumber
NextActivity.class
dalam bahasa jawa artinyatypeof(NextActivity)
dalam C #sumber
ClassName.this
digunakan untuk mereferensikan instance saat ini dari kelas luar dari kelas dalam.sumber
digunakan dalam kelas bersarang untuk merujuk ke instance saat ini dari kelas yang melingkupi, karena kata kunci `ini 'merujuk ke instance kelas bersarang.
sumber
Ini membingungkan hanya karena ketika Anda menggunakan " MainActivity.this ", tampaknya Anda merujuk ke kelas dan bukan objeknya. Pada kenyataannya, saat Anda menggunakan "ini", Anda selalu merujuk ke objek saat ini, seperti yang dinyatakan dalam dokumentasi se java:
https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Ini hanya aneh secara sintaksis.
sumber