Java void методы неявно возвращают это


20

На SO есть пара дискуссий о методах установки, возвращающих тип "this". И похоже, что в Java 7 было предложение void методов, возвращающих это. Но это предложение не может сделать это с функциями Java 7. Я не мог найти, было ли это предложение перенесено на Java 8 или будущее или было полностью отклонено. Это?

Ссылка на ссылку - /programming/31584/design-java-and-returning-self-reference-in-setter-methods


3
Будет полезно иметь некоторые ссылки на обсуждение, которое вы упомянули в вопросе, так что это будет полезно для других и поможет им лучше понять вопрос.
ManuPK

отредактировал мой вопрос
Тарун

Ответы:


11

Я не могу найти никаких источников этого, но я считаю, что эта функция была полностью удалена. Есть много причин, о которых я могу думать:

  • производительность - у каждого voidметода теперь есть дополнительный код операции возврата, и каждое место, где вызывается этот метод, нуждается в неявном использовании, popесли только он не использует цепочку методов

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

Конечно, это также может быть реализовано компилятором ( вызывая метод void? Вы, вероятно, имели в виду this, позвольте мне добавить это неявно ), не знаю, каковы недостатки этого подхода.


1
Компилятор должен поддерживать эту функцию (чтобы вызывающий код компилировался), и он мог сохранить вызываемый объект и использовать его снова без изменения вызывающего метода.
Питер Лоури

Возможности OpenJDK такого рода теперь обрабатываются как предложения по расширению JDK (JEP), и на самом деле их больше нет в списке (и я не видел, чтобы они обсуждались уже довольно давно).
Мартейн Вербург

3

Я не верю, что это когда-либо было официально предложено для воплощения проекта COIN 2009 года. Эта страница предназначена для перечисления всех предложений, и я не вижу ни одного, которое соответствует.

Если бы это не было предложено, это не было бы рассмотрено.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.