TL; DR: jangan lakukan ini.
Apa yang Anda tunjukkan di sini adalah kode rapuh.
Antarmuka adalah kontrak. Dikatakan "terlepas dari objek apa yang Anda dapatkan, ia dapat melakukan X dan Y." Seperti yang tertulis, antarmuka Anda tidak X atau Y karena dijamin menyebabkan stack overflow.
Melempar Kesalahan atau subkelas menunjukkan kesalahan parah yang tidak boleh ditangkap:
Sebuah Kesalahan adalah subkelas Throwable yang mengindikasikan masalah serius yang tidak boleh ditangkap oleh aplikasi yang masuk akal.
Lebih jauh, VirtualMachineError , kelas induk StackOverflowError , mengatakan ini:
Dilemparkan untuk menunjukkan bahwa Java Virtual Machine rusak atau telah kehabisan sumber daya yang diperlukan untuk terus beroperasi.
Program Anda seharusnya tidak peduli dengan sumber daya JVM . Itu adalah pekerjaan JVM. Membuat program yang menyebabkan kesalahan JVM sebagai bagian dari operasi normal buruk. Ini menjamin program Anda akan macet, atau memaksa pengguna antarmuka ini untuk menjebak kesalahan yang seharusnya tidak perlu diperhatikan.
Anda mungkin mengenal Eric Lippert dari upaya seperti emeritus "anggota komite desain bahasa C #". Dia berbicara tentang fitur bahasa yang mendorong orang menuju kesuksesan atau kegagalan: sementara ini bukan fitur bahasa atau bagian dari desain bahasa, maksudnya sama-sama valid ketika datang ke mengimplementasikan antarmuka atau menggunakan objek.
Anda ingat di The Princess Bride ketika Westley bangun dan menemukan dirinya terkunci di The Pit Of Despair dengan albino yang serak dan pria berjari enam yang jahat, Count Rugen? Gagasan prinsip jurang keputusasaan ada dua. Pertama, bahwa itu adalah lubang, dan karena itu mudah jatuh ke dalam tetapi sulit untuk keluar dari pekerjaan. Dan kedua, itu menyebabkan keputusasaan. Maka nama.
Sumber: C ++ dan Pit Of Despair
Memiliki antarmuka melempar secara StackOverflowError
default mendorong pengembang ke Pit of Despair dan merupakan ide yang buruk . Sebaliknya, dorong pengembang ke Pit of Success . Buatlah mudah untuk menggunakan antarmuka Anda dengan benar dan tanpa menabrak JVM.
Mendelegasikan antara metode tidak masalah di sini. Namun, ketergantungan harus berjalan satu arah. Saya suka memikirkan delegasi metode seperti grafik terarah . Setiap metode adalah simpul pada grafik. Setiap kali suatu metode memanggil metode lain, gambarkan tepi dari metode pemanggilan ke metode yang dipanggil.
Jika Anda menggambar grafik dan memperhatikannya adalah siklik, itu adalah bau kode. Itu adalah potensi untuk mendorong pengembang di Pit of Despair. Perhatikan bahwa itu tidak boleh dilarang secara kategoris, hanya saja seseorang harus berhati-hati . Algoritma rekursif secara khusus akan memiliki siklus dalam grafik panggilan: itu bagus. Dokumentasikan dan peringatkan pengembang. Jika tidak berulang, cobalah untuk memutus siklus itu. Jika Anda tidak bisa, cari tahu input apa yang mungkin menyebabkan stack overflow dan mitigasi atau dokumentasikan sebagai kasus terakhir jika tidak ada yang lain yang berfungsi.