Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Merujuk Jenis Semasa dengan Pembolehubah Jenis di Java?

Bagaimanakah Saya Boleh Merujuk Jenis Semasa dengan Pembolehubah Jenis di Java?

Mary-Kate Olsen
Lepaskan: 2024-12-18 08:02:10
asal
419 orang telah melayarinya

How Can I Refer to the Current Type with a Type Variable in Java?

Adakah terdapat cara untuk merujuk kepada jenis semasa dengan pembolehubah jenis?

Di Java, tidak mungkin merujuk secara langsung kepada jenis semasa dengan jenis pembolehubah. Isu timbul apabila cuba menulis kaedah yang boleh mengembalikan contoh jenis semasa, yang menjadi masalah apabila berurusan dengan subtaip. Sebagai contoh, mengisytiharkan kaedah generik dengan jenis pulangan T dalam kelas asas akan merujuk kepada jenis kelas asas dalam subkelas, bukan jenis subkelas sebenar.

Penyelesaian yang memanfaatkan sempadan rekursif dan kelas/antara muka abstrak

Untuk menangani perkara ini, sempadan rekursif dan hierarki kelas abstrak boleh digunakan sebagai berikut:

abstract class SelfTyped<SELF extends SelfTyped<SELF>> {
    abstract SELF self();
}

class MyBaseClass<SELF extends MyBaseClass<SELF>>
        extends SelfTyped<SELF> {

    MyBaseClass() { }

    public SELF baseMethod() {
        return self();
    }
}

final class MyLeafClass extends MyBaseClass<MyLeafClass> {

    @Override
    MyLeafClass self() {
        return this;
    }

    public MyLeafClass leafMethod() {
        return self();
    }
}
Salin selepas log masuk

Dalam pendekatan ini, kelas daun menyelesaikan parameter jenis rekursif SELF kepada jenis mereka sendiri dan melaksanakan self(). Kelas daun boleh digunakan secara langsung, membenarkan kaedah rantaian sambil mengekalkan jenis pulangan yang betul:

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();

AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
Salin selepas log masuk

Awas: Teknik ini bergantung pada corak templat berulang secara ingin tahu (CRT) dan memperkenalkan risiko tertentu :

  • Kerentanan penggantian jenis: Kelas terbitan boleh mengatasi SELF untuk mengembalikan jenis yang berbeza, menjejaskan jaminan jenis kendiri.
  • Pelaksanaan self() yang salah: Pelaksanaan kelas terbitan self() mungkin tidak mengembalikan tika semasa dengan tepat .

Untuk mengurangkan risiko ini, pastikan kelas yang terlibat tidak boleh dilanjutkan secara terbuka dan pertimbangkan untuk menggunakan pakej-pribadi pembina dan kaedah untuk SelfTyped dan self().

Pertimbangan Penilaian dan Penggunaan

Walaupun penyelesaian ini menyediakan cara untuk merujuk jenis semasa, ia memperkenalkan kerumitan dan pengehadan tambahan. Adalah dinasihatkan untuk menimbang dengan teliti faedah berbanding potensi kelemahan sebelum melaksanakannya. Dalam kes di mana rujukan jenis eksplisit adalah penting, penyelesaian ini boleh berguna, tetapi elakkan bergantung padanya secara berlebihan atau dalam API awam.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Merujuk Jenis Semasa dengan Pembolehubah Jenis di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan