TL; DR: nie rób tego.
To, co tu pokazujesz, to kruchy kod.
Interfejs to umowa. Mówi: „niezależnie od tego, jaki obiekt otrzymujesz, może wykonać X i Y”. Jak to jest napisane, twój interfejs robi ani X ani Y, ponieważ jest gwarantowane , aby spowodować przepełnienie stosu.
Zgłoszenie błędu lub podklasy oznacza poważny błąd, którego nie należy wychwytywać:
Błąd jest podklasą Throwable, która wskazuje na poważne problemy, których rozsądna aplikacja nie powinna próbować wychwycić.
Ponadto VirtualMachineError , klasa nadrzędna StackOverflowError , mówi:
Wyrzucony w celu wskazania, że wirtualna maszyna Java jest uszkodzona lub zabrakło zasobów niezbędnych do jej dalszego działania.
Twój program nie powinien zajmować się zasobami JVM . To jest zadanie JVM. Wykonanie programu, który powoduje błąd JVM w ramach normalnej pracy, jest złe. Gwarantuje to awarię programu lub zmusza użytkowników tego interfejsu do wychwytywania błędów, których nie powinien się przejmować.
Być może znasz Erica Lipperta z takich przedsięwzięć, jak emerytowany „członek komitetu projektowego w języku C #”. Mówi o cechach językowych popychających ludzi do sukcesu lub porażki: chociaż nie jest to cecha językowa ani część projektowania języka, jego punkt widzenia jest równie ważny, jeśli chodzi o implementację interfejsów lub używanie obiektów.
Pamiętasz w The Princess Bride, kiedy Westley budzi się i zostaje zamknięty w Otchłani Rozpaczy z ochrypłym albinosem i złowrogim, sześciopalczastym mężczyzną, hrabią Rugen? Zasada rozpaczy jest dwojaka. Po pierwsze, że jest to dół, a zatem łatwo wpaść w trudną pracę, z której można się wydostać. Po drugie, że wywołuje rozpacz. Stąd nazwa.
Źródło: C ++ i Pit Of Despair
Posiadanie interfejsu StackOverflowError
domyślnie wpycha programistów w Pit of Despair i jest złym pomysłem . Zamiast tego popchnij programistów w stronę Pit of Success . Sprawiają, że jest łatwy w użyciu interfejs prawidłowo i bez awarii JVM.
Delegowanie między metodami jest tutaj w porządku. Jednak zależność powinna iść w jedną stronę. Lubię myśleć o delegowaniu metod jak o ukierunkowanym grafie . Każda metoda jest węzłem na wykresie. Za każdym razem, gdy metoda wywołuje inną metodę, narysuj przewagę od metody wywołującej do metody wywoływanej.
Jeśli narysujesz wykres i zauważysz, że jest on cykliczny, będzie to zapach kodu. Jest to potencjał popychania programistów do Pit of Despair. Należy pamiętać, że nie powinno to być kategorycznie zabronione, należy jedynie zachować ostrożność . Algorytmy rekurencyjne będą miały cykle na wykresie połączeń: to dobrze. Dokumentuj to i ostrzegaj programistów. Jeśli nie jest rekurencyjny, spróbuj przerwać ten cykl. Jeśli nie możesz, dowiedz się, jakie dane wejściowe mogą spowodować przepełnienie stosu i albo złagodź je, albo udokumentuj jako ostatni przypadek, jeśli nic więcej nie zadziała.