При обращении к внутренним закрытым переменным Java POJO, которые имеют геттеры / сеттеры, я использовал следующие термины:
- поле
- переменная
- атрибут
- свойство
Есть ли разница между вышеперечисленным? Если да, какой правильный термин использовать? Есть ли другой термин, чтобы использовать, когда эта сущность сохраняется?
Да, есть.
Переменная может быть локальной, полевой или постоянной (хотя это технически неверно). Это расплывчато, как атрибут. Кроме того, вы должны знать, что некоторым людям нравится вызывать окончательные нестатические (локальные или экземплярные) переменные
« Ценности ». Это, вероятно, происходит от появляющихся языков FP JVM, таких как Scala.
Поле обычно является частной переменной в классе экземпляра. Это не значит, что есть геттер и сеттер.
Атрибут является расплывчатым термином. Его легко спутать с XML или API именования Java. Старайтесь избегать использования этого термина.
Свойство является комбинацией метода получения и установки.
Некоторые примеры ниже
Есть еще много комбинаций, но мои пальцы устают :)
источник
Если ваш вопрос был вызван с помощью JAXB и вы хотите выбрать правильный
XMLAccessType
, у меня возник тот же вопрос. В JAXB Javadoc говорится, что «поле» - это нестатическая, нестационарная переменная экземпляра. «Свойство» имеет пару получатель / установщик (поэтому это должна быть закрытая переменная). «Публичный член» является публичным, и поэтому, вероятно, является константой. Также в JAXB «атрибут» относится к части элемента XML, как в<myElement myAttribute="first">hello world</myElement>
.Кажется, что «свойство» Java, в общем, может быть определено как поле с по крайней мере геттером или каким-либо другим открытым методом, который позволяет вам получить его значение. Некоторые люди также говорят, что у собственности должен быть сеттер. Для таких определений контекст - это все.
источник
Дител и Дител имеют хороший способ объяснения полей и переменных.
«Вместе статические переменные класса и переменные экземпляра известны как его поля». (Раздел 6.3)
«Переменные должны объявляться как поля, только если они необходимы для использования более чем в одном методе класса или если программа должна сохранять их значения между вызовами методов класса». (Раздел 6.4)
Таким образом, поля класса являются его статическими переменными или переменными экземпляра - то есть объявлены с областью действия класса.
Справочник - Дител П., Дител, Х. - Как программировать на Java ™ (ранние объекты), десятое издание (2014)
источник
Если вы берете подсказку из Hibernate:
Hibernate читает / записывает состояние объекта с его полем. Hibernate также отображает свойства стиля Java Bean в схему БД. Hibernate Доступ к полям для загрузки / сохранения объекта. Если сопоставление выполняется по свойству, hibernate использует методы получения и установки.
Это Инкапсуляция, которая отличает средства, где у вас есть геттер / установщики для поля, и это называется свойством, при этом, и мы скрываем базовую структуру данных этого свойства в setMethod, мы можем предотвратить нежелательные изменения внутри сеттеров. Все, что означает инкапсуляция ...
Поля должны быть объявлены и инициализированы перед использованием. Главным образом для внутреннего использования класса.
Свойства могут быть изменены установщиком, и они выставляются получателями. Здесь цена поля имеет геттер / сеттер, так что это свойство.
Аналогично, используя поля , [В hibernate это рекомендуемый способ MAP, используя поля, где private int id; аннотирован @Id, но с помощью Property вы получаете больше контроля]
Документ Java говорит: Поле является членом данных класса. Поле является нестатической, нестационарной переменной экземпляра. Поле обычно является частной переменной в классе экземпляра.
источник
Переменные состоят из полей и неполей.
Поля могут быть либо:
Неполями могут быть:
В заключение следует отметить, что ключевое различие между переменными заключается в том, являются ли они полями или неполями, то есть находятся ли они внутри методов или вне всех методов.
Базовый пример (извините за мой синтаксис, я только начинающий)
источник
На самом деле эти два термина часто используются для обозначения одной и той же вещи, но есть некоторые исключительные ситуации. Поле может хранить состояние объекта. Также все поля являются переменными. Таким образом, ясно, что могут быть переменные, которые не являются полями. Итак, рассматривая переменные типа 4 (переменная класса, переменная экземпляра, локальная переменная и переменная параметра), мы можем видеть, что переменные класса и переменные экземпляра могут влиять на состояние объекта. Другими словами, если переменная класса или экземпляра изменяется, состояние объекта изменяется. Таким образом, мы можем сказать, что переменные класса и переменные экземпляра являются полями, а локальные переменные и переменные параметров - нет.
Если вы хотите понять более глубоко, вы можете перейти к источнику ниже: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
источник
Вопрос старый, но еще одно важное различие между переменной и полем состоит в том, что поле получает значение по умолчанию при объявлении. С другой стороны, переменная должна быть инициализирована.
источник
Мое понимание, как показано ниже, и я не говорю, что это на 100% правильно, я мог бы также ошибиться ..
Переменная является то , что вы заявляете, что может по умолчанию , изменяются и имеют разные значения, но которые также могут быть явно сказал окончательным. В Java это будет:
В общем, переменная - это все, что объявлено и может содержать значения. Метод foo выше возвращает переменную, например. Он возвращает переменную типа Integer, которая содержит адрес памяти нового Integer (); Все остальное, что вы видите выше, также является переменными listVariable, aFinalVariableExample и объясняется здесь:
Поле - это переменная, где область видимости более ясна (или конкретна). Переменная, возвращаемая из области видимости метода foo, не ясна в примере выше, поэтому я бы не назвал ее полем. С другой стороны, iAmAlsoVariable является «локальным» полем, ограниченным областью действия метода foo, а listVariable является «экземпляром» поля, в котором область действия поля (переменной) ограничена областью действия объектов.
Свойство - это поле, к которому можно получить доступ / изменить его. Любое поле, которое предоставляет метод получения / установки, является свойством.
Я не знаю об атрибутах, и я также хотел бы повторить, что я понимаю, что такое переменные, поля и свойства.
источник
variable
именованный адрес хранения. Каждая переменная имеет тип, который определяет объем памяти, атрибуты и поведение. Есть для типов Java переменных:class variable
,instance variable
,local variable
,method parameter
field
- переменная-член или элемент данных. Этоvariable
внутриclass
(class variable
илиinstance variable
)attribute
- в некоторых статьях вы можете найти, чтоattribute
этоobject
представлениеclass variable
.Object
действует,attributes
определяя набор характеристик.property
-field
+ ограниченоgetter/setter
. Он имеет синтаксис поля, но использует скрытые методы.Java
не поддерживает его в чистом виде. Посмотрите наObjective-C
,Swift
,Kotlin
Например
Kotlin
образец:[Быстрая переменная, свойство]
источник