En me référant aux variables privées internes des POJO Java qui ont des getters / setters, j'ai utilisé les termes suivants:
- champ
- variable
- attribut
- propriété
Y a-t-il une différence entre ce qui précède? Si oui, quel est le terme correct à utiliser? Existe-t-il un terme différent à utiliser lorsque cette entité est persistante?
Oui il y a.
La variable peut être locale, de champ ou constante (bien que ce soit techniquement faux). C'est vague comme attribut. De plus, vous devez savoir que certaines personnes aiment appeler des variables finales non statiques (locales ou d'instance)
" Valeurs ". Cela vient probablement des langages JVM FP émergents comme Scala.
Le champ est généralement une variable privée sur une classe d'instance. Cela ne veut pas dire qu'il y a un getter et un setter.
L'attribut est un terme vague. Il peut facilement être confondu avec XML ou API de dénomination Java. Essayez d'éviter d'utiliser ce terme.
La propriété est la combinaison getter et setter.
Quelques exemples ci-dessous
Il y a beaucoup plus de combinaisons, mais mes doigts se fatiguent :)
la source
Si votre question a été posée en utilisant JAXB et que vous vouliez choisir la bonne
XMLAccessType
, j'avais la même question. Le Javadoc JAXB indique qu'un "champ" est une variable d'instance non statique et non transitoire. Une "propriété" a une paire getter / setter (donc ce devrait être une variable privée). Un «membre du public» est public et est donc probablement une constante. Toujours dans JAXB, un "attribut" fait référence à une partie d'un élément XML, comme dans<myElement myAttribute="first">hello world</myElement>
.Il semble qu'une "propriété" Java, en général, puisse être définie comme un champ avec au moins un getter ou une autre méthode publique qui vous permet d'obtenir sa valeur. Certaines personnes disent également qu'une propriété doit avoir un setter. Pour des définitions comme celle-ci, le contexte est tout.
la source
Dietel et Dietel ont une belle façon d'expliquer les champs par rapport aux variables.
"Ensemble, les variables statiques et les variables d'instance d'une classe sont appelées ses champs." (Section 6.3)
«Les variables ne doivent être déclarées en tant que champs que si elles sont requises pour être utilisées dans plus d'une méthode de la classe ou si le programme doit enregistrer leurs valeurs entre les appels aux méthodes de la classe.» (Section 6.4)
Ainsi, les champs d'une classe sont ses variables statiques ou d'instance - c'est-à-dire déclarées avec une portée de classe.
Référence - Dietel P., Dietel, H. - Java ™ How To Program (Early Objects), dixième édition (2014)
la source
Si vous prenez des indices d'Hibernate:
Hibernate lit / écrit l'état de l'objet avec son champ. Hibernate mappe également les propriétés de style Java Bean au schéma DB. Hibernate Accédez aux champs de chargement / enregistrement de l'objet. Si le mappage est effectué par propriété, hibernate utilise le getter et le setter.
C'est l'encapsulation qui différencie les moyens où vous avez des getter / setters pour un champ et cela s'appelle propriété, avec cela et nous masquons la structure de données sous-jacente de cette propriété dans setMethod, nous pouvons empêcher les changements indésirables à l'intérieur des setters. Tout ce que signifie l'encapsulation ...
Les champs doivent être déclarés et initialisés avant d'être utilisés. Principalement pour un usage interne à la classe.
Les propriétés peuvent être modifiées par le setter et elles sont exposées par les getters. Ici, le prix du champ a des getter / setters donc c'est une propriété.
De même en utilisant des champs , [En veille prolongée, c'est la méthode recommandée pour MAP en utilisant des champs, où private int id; est annoté @Id, mais avec Property vous avez plus de contrôle]
Le document Java dit: Le champ est un membre de données d'une classe. Un champ est une variable d'instance non statique et non transitoire. Le champ est généralement une variable privée sur une classe d'instance.
la source
Les variables sont composées de champs et de non-champs.
Les champs peuvent être:
Les non-champs peuvent être:
En conclusion, la principale distinction entre les variables est de savoir si ce sont des champs ou des non-champs, c'est-à-dire s'ils sont à l'intérieur d'une méthode ou en dehors de toutes les méthodes.
Exemple de base (excusez-moi pour ma syntaxe, je ne suis qu'un débutant)
la source
En fait, ces deux termes sont souvent utilisés pour représenter la même chose, mais il existe des situations exceptionnelles. Un champ peut stocker l'état d'un objet. Tous les champs sont également des variables. Il est donc clair qu'il peut y avoir des variables qui ne sont pas des champs. Ainsi, en regardant les 4 types de variables (variable de classe, variable d'instance, variable locale et variable de paramètre), nous pouvons voir que les variables de classe et les variables d'instance peuvent affecter l'état d'un objet. En d'autres termes, si une variable de classe ou d'instance change, l'état de l'objet change. Nous pouvons donc dire que les variables de classe et les variables d'instance sont des champs alors que les variables locales et les variables de paramètres ne le sont pas.
Si vous voulez comprendre plus profondément, vous pouvez vous diriger vers la source ci-dessous: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
la source
La question est ancienne, mais une autre différence importante entre une variable et un champ est qu'un champ obtient une valeur par défaut lorsqu'il est déclaré. Une variable, par contre, doit être initialisée.
la source
Ma compréhension est comme ci-dessous, et je ne dis pas que c'est 100% correct, je pourrais tout aussi bien me tromper.
Une variable est quelque chose que vous déclarez, qui peut par défaut changer et avoir des valeurs différentes, mais qui peut également être explicitement considérée comme finale. En Java, ce serait:
Donc, fondamentalement, une variable est tout ce qui est déclaré et peut contenir des valeurs. La méthode foo ci-dessus renvoie une variable par exemple .. Elle renvoie une variable de type Integer qui contient l'adresse mémoire du nouvel Integer (); Tout le reste que vous voyez ci-dessus sont également des variables, listVariable, aFinalVariableExample et expliqué ici:
Un champ est une variable dont la portée est plus claire (ou concrète). La variable retournant de la portée de la méthode foo n'est pas claire dans l'exemple ci-dessus, donc je ne l'appellerais pas un champ. D'autre part, iAmAlsoVariable est un champ "local", limité par la portée de la méthode foo, et listVariable est un champ "instance" où la portée du champ (variable) est limitée par la portée des objets.
Une propriété est un champ accessible / muté. Tout champ qui expose un getter / setter est une propriété.
Je ne connais pas l'attribut et je voudrais également répéter que c'est ma compréhension de ce que sont les variables, les champs et les propriétés.
la source
variable
- adresse de stockage nommée. Chaque variable a un type qui définit une taille de mémoire, des attributs et des comportements. Il existe pour les types de variables Java:class variable
,instance variable
,local variable
,method parameter
field
- variable membre ou membre de données. C'est unvariable
intérieur aclass
(class variable
ouinstance variable
)attribute
- dans certains articles, vous pouvez trouverattribute
qu'il s'agit d'uneobject
représentation declass variable
.Object
opère parattributes
lequel définir un ensemble de caractéristiques.property
-field
+ bornégetter/setter
. Il a une syntaxe de champ mais utilise des méthodes sous le capot.Java
ne le soutient pas sous sa forme pure. Jetez un oeil àObjective-C
,Swift
,Kotlin
Par exemple
Kotlin
échantillon:[Variable Swift, propriété]
la source