Mengapa Java Membenarkan Memanggil Kaedah Statik melalui Instance
Walaupun merupakan amalan yang kelihatan tidak masuk akal, pengkompil Java membenarkan memanggil kaedah statik melalui rujukan contoh. Pertimbangkan kod berikut:
Thread thread = new Thread(); int activeCount = thread.activeCount();
Walaupun kod ini menghasilkan amaran pengkompil, ia tidak mengakibatkan ralat. Ini kerana pereka bahasa Java secara tidak sengaja membenarkan tingkah laku ini semasa reka bentuk bahasa.
Sebab Kesilapan
Punca kesilapan ini mungkin disebabkan oleh faktor berikut :
Implikasi Gelagat ini
Walaupun dibenarkan secara teknikal, memanggil kaedah statik melalui kejadian dianggap sangat mengelirukan. Ia mematahkan jangkaan bahawa kaedah contoh beroperasi pada data tika, manakala kaedah statik ialah kaedah peringkat kelas.
Tingkah laku ini juga bercanggah dengan larangan Java untuk mengakses ahli statik menggunakan rujukan contoh yang mungkin tidak dimulakan. Walaupun hanya menggunakan jenis pembolehubah yang diisytiharkan, panggilan kaedah statik dibenarkan, menunjukkan ketidakkonsistenan dalam reka bentuk bahasa.
Pendekatan Alternatif
Bahasa lain, seperti C# , jangan benarkan kelakuan ini. Sebaliknya, mereka memerlukan panggilan kaedah statik yang layak secara eksplisit dengan nama kelas, memastikan ia jelas apabila kaedah statik sedang digunakan:
Foo.Bar(); // Explicit call to static method of Foo class
Kesimpulan
Walaupun sedang pengawasan dalam reka bentuk bahasa Java, memanggil kaedah statik melalui contoh kekal sebagai amalan yang sah tetapi sangat tidak digalakkan. Ia boleh membawa kepada kod yang mengelirukan dan menyukarkan untuk mengenal pasti niat sebenar panggilan kaedah. Oleh itu, adalah dinasihatkan untuk mengelakkan penggunaan ini dan mengkonfigurasi IDE untuk menganggapnya sebagai ralat untuk memastikan kejelasan dan ketepatan kod.
Atas ialah kandungan terperinci Mengapa Java Membenarkan Memanggil Kaedah Statik Menggunakan Rujukan Contoh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!