Ao me referir a variáveis privadas internas de Java POJOs que possuem getters / setters, usei os seguintes termos:
- campo
- variável
- atributo
- propriedade
Existe alguma diferença entre os itens acima? Em caso afirmativo, qual é o termo correto a ser usado? Existe um termo diferente para usar quando essa entidade persistir?
Sim existe.
A variável pode ser local, campo ou constante (embora isso seja tecnicamente errado). É um atributo vago. Além disso, você deve saber que algumas pessoas gostam de chamar variáveis não estáticas finais (local ou instância)
" Valores ". Provavelmente, isso vem de linguagens emergentes da JVM FP como o Scala.
O campo geralmente é uma variável privada em uma classe de instância. Isso não significa que existe um getter e um setter.
Atributo é um termo vago. Pode ser facilmente confundido com XML ou Java Naming API. Tente evitar o uso desse termo.
Propriedade é a combinação getter e setter.
Alguns exemplos abaixo
Existem muitas outras combinações, mas meus dedos estão ficando cansados :)
fonte
Se sua pergunta foi solicitada usando JAXB e desejando escolher a correta
XMLAccessType
, eu tive a mesma pergunta. O Javadoc JAXB diz que um "campo" é uma variável de instância não estática e não transitória. Uma "propriedade" possui um par getter / setter (portanto, deve ser uma variável privada). Um "membro público" é público e, portanto, provavelmente é uma constante. Também no JAXB, um "atributo" refere-se a parte de um elemento XML, como em<myElement myAttribute="first">hello world</myElement>
.Parece que uma "propriedade" Java, em geral, pode ser definida como um campo com pelo menos um getter ou algum outro método público que permita obter seu valor. Algumas pessoas também dizem que uma propriedade precisa ter um levantador. Para definições como essa, o contexto é tudo.
fonte
Dietel e Dietel têm uma boa maneira de explicar campos vs variáveis.
“Juntas, as variáveis estáticas e as variáveis de instância de uma classe são conhecidas como seus campos.” (Seção 6.3)
"As variáveis devem ser declaradas como campos apenas se forem necessárias para uso em mais de um método da classe ou se o programa salvar seus valores entre as chamadas para os métodos da classe". (Seção 6.4)
Portanto, os campos de uma classe são suas variáveis estáticas ou de instância - ou seja, declaradas com o escopo da classe.
Referência - Dietel P., Dietel, H. - Java ™ Como Programar (Objetos Antigos), Décima Edição (2014)
fonte
Se você pegar uma pista do Hibernate:
O Hibernate lê / grava o estado do objeto com seu campo. O Hibernate também mapeia as propriedades do estilo Java Bean para o Esquema DB. Hibernar Acesse os campos para carregar / salvar o objeto. Se o mapeamento for feito por propriedade, o hibernate usará o getter e o setter.
É o Encapsulamento que diferencia os meios em que você obtém getters / setters para um campo e é chamado de propriedade. Com isso, ocultamos a estrutura de dados subjacente dessa propriedade em setMethod, podemos impedir alterações indesejadas em setters. Tudo o que encapsulamento significa ...
Os campos devem ser declarados e inicializados antes de serem utilizados. Principalmente para uso interno da classe.
As propriedades podem ser alteradas pelo setter e são expostas pelos getters. Aqui o preço do campo tem getter / setters, por isso é propriedade.
Da mesma forma, usando campos , [No modo de hibernação, é a maneira recomendada de mapear usando campos, onde private int id; está anotado em @Id, mas com Property você tem mais controle]
O documento Java diz: Field é um membro de dados de uma classe. Um campo é uma variável de instância não estática e não transitória. O campo geralmente é uma variável privada em uma classe de instância.
fonte
As variáveis são compostas por campos e não campos.
Os campos podem ser:
Os não campos podem ser:
Em conclusão, a principal distinção entre variáveis é se são campos ou não campos, significando se estão dentro de um método ou fora de todos os métodos.
Exemplo básico (desculpe-me pela minha sintaxe, sou apenas um iniciante)
fonte
Na verdade, esses dois termos costumam ser usados para representar a mesma coisa, mas existem algumas situações excepcionais. Um campo pode armazenar o estado de um objeto. Todos os campos também são variáveis. Portanto, é claro que pode haver variáveis que não são campos. Assim, olhando para o tipo de 4 variáveis (variável de classe, variável de instância, variável local e variável de parâmetro), podemos ver que variáveis de classe e variáveis de instância podem afetar o estado de um objeto. Em outras palavras, se uma variável de classe ou instância for alterada, o estado do objeto será alterado. Então, podemos dizer que variáveis de classe e variáveis de instância são campos, enquanto variáveis locais e variáveis de parâmetro não são.
Se você deseja entender mais profundamente, acesse a fonte abaixo: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
fonte
A questão é antiga, mas outra diferença importante entre uma variável e um campo é que um campo obtém um valor padrão quando é declarado. Uma variável, por outro lado, deve ser inicializada.
fonte
Meu entendimento é o seguinte, e não estou dizendo que isso seja 100% correto, posso estar enganado.
Uma variável é algo que você declara, que por padrão pode mudar e ter valores diferentes, mas que também pode ser explicitamente considerado final. Em Java, isso seria:
Então, basicamente, uma variável é qualquer coisa que é declarada e pode conter valores. O método foo acima retorna uma variável, por exemplo. Retorna uma variável do tipo Integer que mantém o endereço de memória do novo Integer (); Tudo o que você vê acima também são variáveis, listVariable, aFinalVariableExample e explicadas aqui:
Um campo é uma variável em que o escopo é mais claro (ou concreto). A variável que retorna do escopo do método foo não é clara no exemplo acima, portanto, eu não chamaria isso de campo. Por outro lado, iAmAlsoVariable é um campo "local", limitado pelo escopo do método foo, e listVariable é um campo de "instância" em que o escopo do campo (variável) é limitado pelo escopo dos objetos.
Uma propriedade é um campo que pode ser acessado / alterado. Qualquer campo que expõe um getter / setter é uma propriedade.
Eu não sei sobre atributo e também gostaria de repetir que esse é meu entendimento sobre o que são variáveis, campos e propriedades.
fonte
variable
- endereço de armazenamento nomeado. Toda variável possui um tipo que define um tamanho de memória, atributos e comportamentos. Existem, por tipos de variáveis em Java:class variable
,instance variable
,local variable
,method parameter
field
- variável membro ou membro de dados. É umvariable
dentro de umclass
(class variable
ouinstance variable
)attribute
- em alguns artigos você pode achar queattribute
é umaobject
representação declass variable
.Object
opera peloattributes
qual define um conjunto de características.property
-field
+ delimitadogetter/setter
. Ele tem uma sintaxe de campo, mas usa métodos ocultos.Java
não suporta na forma pura. Dê uma olhadaObjective-C
,Swift
,Kotlin
Por exemplo
Kotlin
exemplo:[Variável Swift, propriedade]
fonte