2009-04-02 2 views
16

Есть ли разумная причина, почему native properties не будет частью Java 7?Почему в Java 7 не существует собственных свойств?

+3

Не измеряйте способности языка по количеству его функций. Подумайте о платформе, экосистеме, ... –

+0

Это был феноменальный комментарий Иван. Я изучаю C#, и многие из функций, с которыми я сталкиваюсь в том, что Java не хватает, не кричат, как будто они решат удивительно более сложные проблемы. Также некоторые просто похоже, что они могут уступить более сложному коду, например, если несколько вещей возвращаются из метода через ауты. Или позорное утверждение goto. –

ответ

15

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

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

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

+1

Для менее информированного, не могли бы вы вкратце объяснить сложность реализации свойств на Java? – Jason

3
  • Не хватает времени?
  • Не совсем правильно?
  • Сложно добавить к java из-за реализации java?
  • Полагают, что это не так важно, т.е. другие вещи были приоритетными?
18

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

Но я думаю, что реальная причина ВС не толкая свойств такой же, как закрытие:

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

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

история

Свойства здесь:

+0

Интересно. Я не знал о разногласиях по поводу свойств, по крайней мере, не вызвало разжигание ненависти. Можете ли вы предоставить какие-либо ссылки, чтобы заполнить фон плюсов и минусов? Я согласен с тем, что свойства менее важны на стороне сервера, а JavaFX удовлетворяет потребности на клиенте. – erickson

+1

Будучи человеком на стороне сервера, свойства - это все, что у меня есть. – trunkc

+0

Добавлена ​​ссылка на старые обсуждения свойств. Лично я энергично амбивалентен. Я считаю, что большинство предложений меня не слишком возбуждают. Я не уверен, что Java может пойти достаточно далеко, чтобы действительно удовлетворить, как Groovy или Scala в этом отделе. –

10

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

5

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

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

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

+1

Объект _ «Свойства не очень объектно-ориентированные» _. И так делают другие: _ "[" объекты ", которые представляют собой структуры данных, которые содержат данные, в виде полей, часто называемых атрибутами, и код в виде процедур, часто известных как методы.] (Http://en.wikipedia.org/wiki/Object-oriented_programming)". Заставляя пользователя объекта (API/class /) игнорировать половину того, что он по определению, является неудобным, по крайней мере. Это и неестественный, и код bloats: 'person.name =" Nimoy ";' vs. 'person.setName (" Nimoy ");' и 'name = person.name;' vs. 'name = person.getName(); . –

+0

Я предлагаю избегать фразы «не очень объектно-ориентированная» тоже (что на данный момент практически бессмысленно), но сохраняя обе точки (которые имеют хороший дизайн, простой и простой). В противном случае читатели будут сосредоточены на своем собственном личном определении ООП и игнорировать то, что на самом деле говорится здесь. – tne

Смежные вопросы