Rumah >Java >javaTutorial >Bagaimanakah Corak Templat Berulang Aneh (CRTP) Boleh Menyelesaikan Had Pembolehubah Jenis Java?
Dalam pengaturcaraan berorientasikan objek, selalunya wajar untuk merujuk kepada jenis kejadian semasa dalam kaedah atau fungsi. Walau bagaimanapun, dalam Java, pembolehubah jenis tidak dibenarkan merujuk kepada jenis kelas yang diisytiharkan, yang membawa kepada situasi di mana tingkah laku yang diingini tidak dapat dicapai.
Mengelakkan Had Pembolehubah Jenis
Untuk mengatasi had ini, corak kompleks telah muncul yang dipanggil "Corak Templat Berulang Aneh" (CRTP). Corak ini melibatkan penciptaan struktur kelas hierarki di mana setiap peringkat hierarki mentakrifkan kontrak untuk mengembalikan jenis masa jalan kejadiannya:
Kelas Asas SelfTyped
abstract class SelfTyped<SELF extends SelfTyped<SELF>> { abstract SELF self(); }
Kelas Lanjutan Pertengahan (Abstrak)
public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>> extends SelfTyped<SELF> { MyBaseClass() { } public SELF baseMethod() { //logic return self(); } }
Kelas Pelaksana Daun (Akhir)
public final class MyLeafClass extends MyBaseClass<MyLeafClass> { @Override MyLeafClass self() { return this; } public MyLeafClass leafMethod() { //logic return self(); //could also just return this } }
Penggunaan Corak
MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod(); AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
Awas dan Had
Corak CRTP bukan tanpa masalah dan batasannya:
Kesimpulan
Corak CRTP menawarkan penyelesaian untuk merujuk jenis semasa menggunakan pembolehubah jenis, tetapi adalah penting untuk mempertimbangkan dengan teliti implikasi dan penggunaannya ia berhemat. Ia adalah corak kompleks yang memerlukan pelaksanaan yang teliti dan harus dikhaskan untuk kes yang manfaatnya melebihi kerumitan tambahan.
Atas ialah kandungan terperinci Bagaimanakah Corak Templat Berulang Aneh (CRTP) Boleh Menyelesaikan Had Pembolehubah Jenis Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!