Kaedah Statik dalam Kelas Dalam Bukan Statik: Java vs. Java 16
Di Jawa, ketiadaan kaedah statik dalam bukan statik kelas dalaman telah menjadi had yang lama. Timbul persoalan mengapa sekatan ini wujud.
Dilema dalam Pra-Java 16
Pertimbangkan kod berikut:
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
Percubaan untuk mengisytiharkan kaedah statik dalam kelas dalaman bukan statik menghasilkan ralat pengkompil. Had ini berpunca daripada perkaitan tersirat antara contoh kelas dalam dan contoh kelas luar yang disertakan. Memandangkan tika kelas dalam bukan statik tergolong dalam tika kelas luar tertentu, ia tidak boleh menentukan kaedah statik, yang mengikut takrifannya tidak dikaitkan dengan tika tertentu.
Kelas Dalaman Statik: Pengecualian
Walau bagaimanapun, menjadikan kelas dalam statik menyelesaikan isu:
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
Dalam kes ini, kelas dalam diisytiharkan statik, bermakna ia tidak terikat pada contoh khusus luar kelas. Akibatnya, kaedah statik boleh ditakrifkan dalam kelas dalaman kerana ia tidak terikat dengan kejadian tertentu.
Java 16 dan Seterusnya: Mengeluarkan Sekatan
Dalam Java 16, had ini telah ditarik balik. Kelas dalaman bukan statik kini dibenarkan untuk mengisytiharkan kaedah statik. Walau bagaimanapun, adalah penting untuk berhati-hati apabila berbuat demikian, kerana kaedah statik dalam kelas dalaman berkongsi nama kelas dengan kelas yang disertakan, yang boleh membawa kepada potensi konflik penamaan.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berpotensi berdasarkan artikel anda, memfokuskan pada format soalan: Langsung dan ringkas: * Mengapa Kelas Dalaman Bukan Statik Tidak Boleh Mempunyai Kaedah Statik di Jawa? * Kaedah Statik di No. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!