Saya memiliki kode berikut. Saya ingin mendapatkan objek kelas luar menggunakan yang saya buat objek kelas dalam inner
. Bagaimana saya bisa melakukannya?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
EDIT: Ya, beberapa dari kalian menyarankan untuk memodifikasi kelas dalam dengan menambahkan metode:
public OuterClass outer() {
return OuterClass.this;
}
Tetapi bagaimana jika saya tidak memiliki kontrol untuk memodifikasi kelas dalam, maka (hanya untuk mengkonfirmasi) apakah kita memiliki cara lain untuk mendapatkan objek kelas luar yang sesuai dari objek kelas dalam?
sumber
OuterClass.this
referensi kelas luar.sumber
Anda bisa (tetapi tidak seharusnya) menggunakan refleksi untuk pekerjaan itu:
Tentu saja, nama referensi implisit sama sekali tidak dapat diandalkan, jadi seperti yang saya katakan, Anda tidak boleh :-)
sumber
Jawaban yang lebih umum untuk pertanyaan ini melibatkan variabel gelap dan bagaimana mereka diakses.
Dalam contoh berikut (dari Oracle), variabel x di main () membayangi Test.x :
Menjalankan program ini akan mencetak:
Lebih lanjut di: http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6
sumber
Inilah contohnya:
sumber
jika Anda tidak memiliki kontrol untuk memodifikasi kelas dalam, refection dapat membantu Anda (tetapi tidak merekomendasikan). $ 0 ini adalah referensi dalam kelas dalam yang memberitahu instance kelas luar mana yang digunakan untuk membuat instance kelas batin saat ini.
sumber
Tentu saja, nama referensi implisit tidak dapat diandalkan, jadi Anda tidak harus menggunakan refleksi untuk pekerjaan itu.
sumber
Telah diedit pada 2020-06-15
sumber