Bolehkah Anda Meniru Konsep C 'Rakan' di Jawa?
Di Jawa, secara amnya tidak mungkin untuk kelas dalam satu pakej untuk mengakses ahli bukan awam kelas dalam pakej lain. Walau bagaimanapun, terdapat helah yang boleh digunakan untuk mensimulasikan tingkah laku ini.
Helahnya
Helah itu melibatkan penggunaan kelas bersarang dengan pembina peribadi. Kelas bersarang ini bertindak sebagai "keselamatan tandatangan" untuk kaedah yang anda ingin hadkan akses. Berikut ialah contoh:
// Package: capulet public class Juliet { public static void cuddle(Romeo.Love love) { // Check that the love is real (null check) Objects.requireNonNull(love); // Call the cuddle method System.out.println("O Romeo, Romeo, wherefore art thou Romeo?"); } }
// Package: montague public class Romeo { // Nested class with private constructor public static final class Love { private Love() {} } // Static reference to the love class private static final Love love = new Love(); // Public method to cuddle Juliet using the nested class public static void cuddleJuliet() { Juliet.cuddle(love); } }
Dalam contoh ini, kelas Romeo.Love bersarang dalam kelas Romeo dan mempunyai pembina peribadi. Ini bermakna tiada kelas lain boleh membina contoh Romeo.Love. Kelas Juliet mempunyai kaedah awam yang dipanggil cuddle yang mengambil contoh Romeo.Cinta sebagai parameter.
Memandangkan hanya kelas Romeo boleh mencipta tika Romeo.Love, hanya kelas Romeo boleh memanggil kaedah cuddle. Ini secara berkesan mengehadkan akses kepada kaedah peluk kepada kelas Romeo, meniru gelagat konsep rakan C.
Atas ialah kandungan terperinci Bolehkah Java Meniru Konsep C 'Rakan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!