Недійсні методи Java неявно повертають це


20

є декілька дискусій на SO про методи сеттера, що повертають "цей" тип. І схоже, що у java 7 була пропозиція недійсних методів повернення цього. Але ця пропозиція не змогла зробити його особливостями java 7. Я не міг знайти, чи буде ця пропозиція перенесена на java 8 чи майбутнє чи її повністю відкинули. Є це?

Посилання на посилання - /programming/31584/design-java-and-returning-self-reference-in-setter-methods


3
Будемо вдячні мати деякі посилання на дискусію, про яку ви згадали у питанні, щоб вона була корисною для інших та допоможе їм зрозуміти питання більше.
МануПК

редагував моє запитання
Tarun

Відповіді:


11

Я, здається, не можу знайти жодних джерел цього, але я вважаю, що ця функція була повністю відхилена. Є багато причин, про які я можу придумати:

  • продуктивність - кожен voidметод тепер має додатковий зворотний код, і кожне місце, де цей метод називається, потребує неявного, popякщо він фактично не використовує метод ланцюга

  • зворотна сумісність - компіляція з цією функцією раптом робить код назад несумісним, оскільки контракт кожного voidметоду змінився

Звичайно, це також може реалізувати компілятор ( метод виклику void? Ви, мабуть, мали на увазі this, дозвольте мені додати це неявно ), не знаю, які недоліки такого підходу.


1
Компілятор повинен був би підтримувати цю функцію (щоб компілюючий код викликав), і він міг би зберегти викликаний об'єкт і знову використовувати його, не змінюючи метод виклику.
Пітер Лорі

Особливості такого OpenJDK зараз обробляються як пропозиції щодо вдосконалення JDK (JEPs), і справді цього більше немає в списку (і я не бачив, щоб це обговорювалося досить давно).
Martijn Verburg

3

Я не вірю, що це було офіційно запропоновано для втілення проекту COIN 2009 року. Ця сторінка має на увазі перелік усіх пропозицій, і я не можу побачити жодної, яка відповідає.

Якби не було запропоновано, воно не було б розглянуте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.