To pytanie dotyczy tego, czy uczynić zagnieżdżoną klasę w Javie klasą zagnieżdżoną statycznie czy wewnętrznie zagnieżdżoną. Szukałem tutaj i nad przepełnieniem stosu, ale tak naprawdę nie mogłem znaleźć żadnych pytań dotyczących konsekwencji projektowych tej decyzji.
Znalezione przeze mnie pytania dotyczą różnicy między statycznymi i wewnętrznymi klasami zagnieżdżonymi, co jest dla mnie jasne. Jednak nie znalazłem jeszcze przekonującego powodu, aby kiedykolwiek używać statycznej zagnieżdżonej klasy w Javie - z wyjątkiem klas anonimowych, których nie rozważam w przypadku tego pytania.
Oto moje rozumienie efektu używania statycznych klas zagnieżdżonych:
- Mniej sprzężenia: generalnie uzyskujemy mniej sprzężenia, ponieważ klasa nie ma bezpośredniego dostępu do atrybutów swojej klasy zewnętrznej. Mniej sprzężenia oznacza ogólnie lepszą jakość kodu, łatwiejsze testowanie, refaktoryzację itp.
- Pojedynczy
Class
: moduł ładujący klasy nie musi dbać o nową klasę za każdym razem, gdy tworzymy obiekt klasy zewnętrznej. Ciągle otrzymujemy nowe obiekty dla tej samej klasy.
W przypadku klasy wewnętrznej ogólnie uważam, że ludzie uważają dostęp do atrybutów klasy zewnętrznej za profesjonalistę. Zaczynam się różnić pod tym względem z punktu widzenia projektowania, ponieważ ten bezpośredni dostęp oznacza, że mamy wysoki stopień sprzężenia, a jeśli kiedykolwiek chcemy wyodrębnić zagnieżdżoną klasę do oddzielnej klasy najwyższego poziomu, możemy to zrobić dopiero po zasadniczym odwróceniu w statyczną zagnieżdżoną klasę.
Moje pytanie sprowadza się zatem do tego: czy mylę się, zakładając, że dostęp do atrybutów dostępny dla niestatycznych klas wewnętrznych prowadzi do wysokiego sprzężenia, a tym samym do niższej jakości kodu, i wywnioskuję z tego, że (nieanonimowe) klasy zagnieżdżone powinny ogólnie być statycznym?
Innymi słowy: czy istnieje przekonujący powód, dla którego wolałaby zagnieżdżoną klasę wewnętrzną?