Metody Java void niejawnie zwracają to


20

jest kilka dyskusji na temat SO o metodach ustawiających zwracających „ten” typ. I wygląda na to, że java 7 miała propozycję zwrócenia nieważnych metod. Ale ta propozycja nie mogła przejść do funkcji java 7. Nie mogłem znaleźć, czy ta propozycja została przeniesiona na Javę 8 lub w przyszłości, czy też została całkowicie odrzucona. Czy to jest

Link referencyjny - /programming/31584/design-java-and-returning-self-reference-in-setter-methods


3
Będzie mi miło mieć kilka linków do dyskusji, o której wspomniałeś w pytaniu, dzięki czemu będzie przydatny dla innych i pomoże im lepiej zrozumieć pytanie.
ManuPK

zredagowałem moje pytanie
Tarun,

Odpowiedzi:


11

Nie mogę znaleźć żadnych źródeł tego, ale uważam, że ta funkcja została całkowicie usunięta. Istnieje wiele powodów, dla których mogę myśleć:

  • wydajność - każda voidmetoda ma teraz dodatkowy kod powrotu i każde miejsce, w którym ta metoda jest nazywana, wymaga niejawności, popchyba że faktycznie używa łańcucha

  • kompatybilność wsteczna - kompilacja z tą funkcją nagle powoduje niezgodność kodu wstecznego, ponieważ voidzmienił się kontrakt każdej metody

Oczywiście może to również zostać zaimplementowane przez kompilator ( wywołanie metody void? Prawdopodobnie miałeś na myśli this, pozwól, że dodam to w sposób dorozumiany ), nie wiem jakie są wady tego podejścia.


1
Kompilator musiałby obsługiwać tę funkcję (aby kod wywołujący mógł się skompilować) i mógłby zapisać wywoływany obiekt i użyć go ponownie bez zmiany metody wywoływania.
Peter Lawrey,

Funkcje tego typu OpenJDK są teraz obsługiwane jako Propozycje ulepszeń JDK (JEP) i rzeczywiście nie są one już wymienione (i nie widziałem tego od dłuższego czasu).
Martijn Verburg,

3

Nie sądzę, by kiedykolwiek formalnie zaproponowano to wcielenie projektu COIN w 2009 roku. Ta strona zawiera listę wszystkich propozycji i nie widzę takiej, która odpowiada.

Gdyby nie został zaproponowany, nie zostałby wzięty pod uwagę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.