16

Вопрос по c#, java, properties – Java и C # -подобные свойства

Java изначально поддерживает свойства, такие как C #? Или при кодировании на Java, при попытке инкапсулировать переменные, вы вынуждены сделать этоgetVariable() а такжеsetVariable() какие-то методы?

Спасибо

5 ответов
4

Java не поддерживает C # -подобные свойства. Вам нужны геттеры и сетте

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

Вы защищаете это: object x =thing.getX (); if (x.equals (something.getX ())) {// Не может случиться}

от brian

Свойства C # являются просто синтаксическим сахаром для методов получения и установки. Там нет никакой разницы, чем Java (за исключением 10x лучшего кода). Вы правы, то же самое относится к любому виду возвращаемого значения, независимо от того, как вы его приобретаете.

от Ekin Koc

МММ ясно. Так должен ли я всегда делать глубокие копии переменных при возврате из геттера?

от devoured elysium

Нет, только если это не безопасно, чтобы быть измененным снаружи. Дело в том, что для примитива типа 'int' вы можете просто создать геттер без установщика для защиты вашей переменной. Но если вы возвращаете ссылочный тип (скажем, коллекцию) из своего геттера, внутренним состоянием этого объекта можно манипулировать снаружи (что-то вроде member.getFriends (). Clear ()) Если вы не можете себе этого позволить, верните копию (или оболочка только для чтения).

от Ekin Koc

Как это относится к свойствам C # и Java? Разве это не здравый смысл для любого возвращаемого значения?

от Dykam
2

В прошлый раз, когда я проверял, Java не поддерживает свойства.

18

нет

У вас нет концепции свойств в языке Java. Вам нужно использовать геттеры и сеттеры ..

Спасибо за добавление этого, но я предположил, что говорил о языке Jave в этом вопросе.

от stiank81

Почти: у вас нет поддержки на уровне языка, но свойства являются четко определенным понятием в спецификации Java-бинов и определяются через их методы получения / установки.

от Joachim Sauer

И я согласен с этим предположением. Но все же я хотел бы не создавать впечатление, что во всей Java (платформе) нет ничего похожего на свойства. Хотя Java (язык) не поддерживает его, на платформе это не является чем-то неизвестным.

от Joachim Sauer
4

Как говорили другие

ни одна Java не обладает свойствами как таковыми. Принятым методом является использование геттеров и сеттеров. Кстати, в Delphi есть поддержка свойств, очень похожих на C #.

Определенно ничего подобного AutoProperties не поддерживается в Java. Кажется, я не могу найти упоминаний о какой-либо поддержке в будущем.

0

Свойства C # похожи на свойства Delphi по той простой причине

что они были вдохновлены свойствами Delphi. Перемещение одного из ключевых людей из команды Borland в Delphi в Microsoft и (помощь) в разработке C #, конечно, не имеет к этому никакого отношения :)

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

не обязательно. Многие вещи просто позволяют больше запутывания. Мне скорее нравятся свойства в C #, но я понимаю, почему это может привести к проблемам, связанным с невозможностью различить вызывающий код между доступом к члену и его получателю / установщику. Например, если у меня есть производный класс, я бы хотел обойти метод получения / установки и получить прямой доступ к члену класса в некоторых ситуациях, например, в переопределенном методе получения или установки или по соображениям производительности.

от jwenting

Я думал, что синтаксический сахар был хорошей вещью ..

от devoured elysium

Кажется, что во многих случаях простые методы получения и установки могут удвоить количество строк кода, которые действительно нужны классам.

от Jon Onstott

Похожие вопросы