Почему в Java 7 не будет нативных свойств? - PullRequest
16 голосов
/ 02 апреля 2009

Есть ли рациональная причина, почему нативные свойства не будут частью Java 7?

Ответы [ 5 ]

18 голосов
/ 02 апреля 2009

Есть несколько причин высокого уровня, связанных с графиком и ресурсами, конечно. Реализация свойств и понимание всех последствий и пересечений с другими языковыми функциями - большая задача, аналогичная размеру различных изменений языка Java 5.

Но я думаю, что настоящая причина, по которой Sun не продвигает свойства, такая же, как у замыканий:

1) Нет единого мнения о том, как должна выглядеть реализация. Или, скорее, есть много конкурирующих альтернатив, и люди, которые увлечены свойствами, не согласны с важными частями реализации.

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

История свойств здесь:

16 голосов
/ 02 апреля 2009

Делать свойства "правильно" в Java будет непросто. Работа Реми Форакса была особенно полезна для выяснения того, как это может выглядеть, и для раскрытия множества «ловушек», с которыми придется иметь дело.

Между тем Java 7 уже заняла слишком много времени. Дебаты о замыканиях были огромным, противоречивым отвлечением, которое потратило много сил и разума, которые могли бы быть использованы для разработки функций (таких как свойства), которые получили широкую поддержку. В конечном итоге было принято решение ограничить серьезные изменения в модульности (Project Jigsaw). Для языка рассматривается только "небольшое изменение" (в разделе Project Coin).

JavaFX имеет прекрасную поддержку свойств, поэтому Sun четко понимает значение свойств и знает, как их реализовать. Но будучи испорченными свойствами JavaFX, разработчики с меньшей вероятностью согласятся на полусгнившую реализацию в Java. Если они того стоят, они того стоит.

10 голосов
/ 07 июля 2010

По умолчанию любая заданная вещь «не выполнена», поэтому для того, чтобы что-то не было сделано, не требуется особой причины. Скорее, нужна какая-то веская причина, чтобы переместить что-то из «не выполнено» в «запланировано» или «сделано» Для этой языковой функции пока не возникло достаточно веской причины.

5 голосов
/ 05 октября 2011

Есть еще две причины избегать свойств на любом языке:

  • Свойства не очень объектно-ориентированы. Упрощение их написания поощряет шаблон, в котором объект просто обслуживает свое внутреннее состояние, и вызывающий объект манипулирует им. Объект должен предоставлять методы более высокого уровня и сохранять его внутренние данные закрытыми. В следующий раз, когда вы утомительно внедряете метод получения, подумайте, что будет делать вызывающий с данными и можете ли вы просто предоставить эту функцию напрямую.

  • Свойства поддерживают изменяемое состояние (через установщики), что делает программу менее распараллеливаемой. По мере того, как число ядер увеличивается, мы все должны пытаться сделать наши объекты неизменяемыми, чтобы облегчить параллельные рассуждения. В следующий раз, когда вы утомительно реализуете сеттер, рассмотрите возможность его удаления и сделайте объект неизменным.

3 голосов
/ 02 апреля 2009
  • Не хватает времени?
  • Еще не определен правильно?
  • Сложно добавить в Java из-за реализации Java?
  • Считается недостаточно важным, то есть другие вещи были приоритетными?
...