Rumah >Java >javaTutorial >Mengapa Java Membenarkan Invokasi Kaedah Statik Melalui Kejadian, dan Mengapa Anda Perlu Mengelakkannya?
Invokasi Kaedah Statik melalui Contoh dalam Java
Di Java, adalah mungkin untuk menggunakan kaedah statik melalui contoh, tingkah laku yang menimbulkan pengkompil amaran tetapi bukan ralat.
Mengapa Ia tidak Ralat?
Pasukan reka bentuk Java membuat kesilapan dengan membenarkan gelagat ini pada mulanya. Walaupun ia tidak disokong secara jelas, ia telah dikekalkan atas sebab keserasian. Walaupun ia boleh membawa kepada kod mengelirukan, ia tidak semestinya salah.
Ilusi Polimorfisme
Salah satu sebab mengapa memanggil kaedah statik melalui contoh boleh mengelirukan ialah bahawa ia mewujudkan kesan polimorfisme. Dalam polimorfisme sebenar, kaedah yang digunakan berbeza-beza berdasarkan jenis objek. Walau bagaimanapun, kaedah statik bukan polimorfik; mereka sentiasa terikat pada kelas yang diisytiharkan.
Pertimbangkan contoh berikut:
Thread thread = new Thread(); int activeCount = thread.activeCount();
Kod ini akan menyusun tetapi menjana amaran kerana activeCount ialah kaedah statik kelas Thread . Pengkompil tidak dapat menentukan contoh kelas Thread yang harus digunakan untuk invocation. Kod jenis ini boleh menyebabkan kekeliruan dan kemungkinan ralat.
Pendekatan Alternatif
Dalam bahasa seperti C#, memanggil kaedah statik melalui kejadian tidak dibenarkan. Sebaliknya, pendekatan yang betul ialah menggunakan kaedah statik menggunakan nama kelas, seperti yang ditunjukkan di bawah:
public class Abc { public void Test() { // Static methods in other classes are available via // the class name Foo.Bar(); } }
Kesimpulan
Walaupun secara teknikalnya dibenarkan untuk memanggil kaedah statik melalui contoh di Jawa, ia dianggap sebagai amalan buruk yang boleh membawa kepada kod yang mengelirukan. Pembangun harus mengelakkan tingkah laku ini dan menganggap amaran pengkompil yang dihasilkannya sebagai ralat. Dalam IDE moden, adalah disyorkan untuk mengkonfigurasi pengkompil untuk menganggap seruan tersebut sebagai ralat untuk memastikan kejelasan dan ketepatan kod.
Atas ialah kandungan terperinci Mengapa Java Membenarkan Invokasi Kaedah Statik Melalui Kejadian, dan Mengapa Anda Perlu Mengelakkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!