qué - que es un enum en java
¿Cuál es la diferencia entre campo, variable, atributo y propiedad en Java POJOs? (9)
Cuando me refiero a las variables privadas internas de POJOs de Java que tienen getters / setters, he usado los siguientes términos:
- campo
- variable
- atributo
- propiedad
¿Hay alguna diferencia entre los anteriores? Si es así, ¿cuál es el término correcto para usar? ¿Hay un término diferente para usar cuando se persiste esta entidad?
Desde aquí: http://docs.oracle.com/javase/tutorial/information/glossary.html
campo
- Un miembro de datos de una clase. A menos que se especifique lo contrario, un campo no es estático.
propiedad
- Las características de un objeto que los usuarios pueden establecer, como el color de una ventana.
atributo
- No figura en el glosario anterior
variable
- Un elemento de datos nombrado por un identificador. Cada variable tiene un tipo, como int u Object, y un alcance. Ver también variable de clase, variable de instancia, variable local.
Dietel y Dietel tienen una buena forma de explicar campos vs variables.
"Juntas, las variables estáticas y de instancia de una clase se conocen como sus campos" (Sección 6.3)
"Las variables deben declararse como campos solo si son necesarias para usar en más de un método de la clase o si el programa debe guardar sus valores entre llamadas a los métodos de la clase". (Sección 6.4)
Entonces, los campos de una clase son sus variables estáticas o de instancia, es decir, declaradas con alcance de clase.
Referencia - Dietel P., Dietel, H. - Java ™ Cómo programar (objetos antiguos), décima edición (2014)
En realidad, estos dos términos se usan a menudo para representar lo mismo, pero hay algunas situaciones excepcionales. Un campo puede almacenar el estado de un objeto. También todos los campos son variables. Entonces, está claro que puede haber variables que no son campos. Entonces, al observar el tipo de 4 variables (variable de clase, variable de instancia, variable local y variable de parámetro), podemos ver que las variables de clase y las variables de instancia pueden afectar el estado de un objeto. En otras palabras, si una clase o variable de instancia cambia, el estado del objeto cambia. Entonces, podemos decir que las variables de clase y las variables de instancia son campos, mientras que las variables locales y las variables de parámetro no.
Si quieres entender más profundamente, puedes dirigirte a la fuente a continuación:
La pregunta es antigua, pero otra diferencia importante entre una variable y un campo es que un campo obtiene un valor predeterminado cuando se declara. Por otro lado, una variable debe inicializarse.
Las variables están compuestas de campos y no campos.
Los campos pueden ser:
- Campos estáticos o
- campos no estáticos también llamados instanciaciones, por ejemplo, x = F ()
Los no campos pueden ser:
- variables locales, el análogo de campos pero dentro de un método en lugar de fuera de todos ellos, o
- parámetros eg y en x = f (y)
En conclusión, la distinción clave entre variables es si son campos o no campos, lo que significa si están dentro de un método o fuera de todos los métodos.
Ejemplo básico (discúlpeme por mi sintaxis, solo soy un principiante)
Class {
//fields
method1 {
//non-fields
}
}
Mi comprensión es la siguiente, y no estoy diciendo que esto sea 100% correcto, podría estar equivocado.
Una variable es algo que declaras, que por defecto puede cambiar y tener diferentes valores, pero también se puede decir que es definitiva. En Java eso sería:
public class Variables {
List<Object> listVariable; // declared but not assigned
final int aFinalVariableExample = 5; // declared, assigned and said to be final!
Integer foo(List<Object> someOtherObjectListVariable) {
// declare..
Object iAmAlsoAVariable;
// assign a value..
iAmAlsoAVariable = 5;
// change its value..
iAmAlsoAVariable = 8;
someOtherObjectListVariable.add(iAmAlsoAVariable);
return new Integer();
}
}
Entonces, básicamente, una variable es todo lo que se declara y puede contener valores. El método foo anterior devuelve una variable, por ejemplo. Devuelve una variable de tipo Entero que contiene la dirección de memoria del nuevo Número entero (); Todo lo demás que ves arriba también son variables, listVariable, aFinalVariableExample y se explican aquí:
Un campo es una variable donde el alcance es más claro (o concreto). La variable que regresa del alcance del método foo no está clara en el ejemplo anterior, por lo que no la llamaría campo. Por otro lado, iAmAlsoVariable es un campo "local", limitado por el alcance del método foo, y listVariable es un campo "instancia" donde el alcance del campo (variable) está limitado por el alcance de los objetos.
Una propiedad es un campo al que se puede acceder / mutar. Cualquier campo que expone un getter / setter es una propiedad.
No sé sobre el atributo y también me gustaría repetir que esta es mi comprensión de qué variables, campos y propiedades son.
Sí hay.
La variable puede ser local, de campo o constante (aunque esto es técnicamente incorrecto). Es vago como atributo. Además, debe saber que a algunas personas les gusta llamar variables no estáticas finales (locales o de instancia)
" Valores ". Esto probablemente proviene de lenguajes JVM FP emergentes como Scala.
El campo generalmente es una variable privada en una clase de instancia. No significa que hay un getter y un setter.
Atributo es un término vago. Se puede confundir fácilmente con XML o Java Naming API. Intenta evitar usar ese término.
La propiedad es la combinación getter y setter.
Algunos ejemplos a continuación
public class Variables {
//Constant
public final static String MY_VARIABLE = "that was a lot for a constant";
//Value
final String dontChangeMeBro = "my god that is still long for a val";
//Field
protected String flipMe = "wee!!!";
//Property
private String ifYouThoughtTheConstantWasVerboseHaHa;
//Still the property
public String getIfYouThoughtTheConstantWasVerboseHaHa() {
return ifYouThoughtTheConstantWasVerboseHaHa;
}
//And now the setter
public void setIfYouThoughtTheConstantWasVerboseHaHa(String ifYouThoughtTheConstantWasVerboseHaHa) {
this.ifYouThoughtTheConstantWasVerboseHaHa = ifYouThoughtTheConstantWasVerboseHaHa;
}
}
Hay muchas más combinaciones, pero mis dedos se están cansando :)
Si su pregunta fue solicitada usando JAXB y desea elegir el XMLAccessType
correcto, tuve la misma pregunta. El JAXB Javadoc dice que un "campo" es una variable de instancia no estática y no transitoria. Una "propiedad" tiene un par getter / setter (por lo que debe ser una variable privada). Un "miembro público" es público, y por lo tanto es probablemente una constante. También en JAXB, un "atributo" se refiere a parte de un elemento XML, como en <myElement myAttribute="first">hello world</myElement>
.
Parece que una "propiedad" de Java, en general, se puede definir como un campo con al menos un captador u otro método público que le permite obtener su valor. Algunas personas también dicen que una propiedad necesita tener un colocador. Para definiciones como esta, el contexto es todo.
Si toma la pista de Hibernate:
Hibernate lee / escribe el estado del Objeto con su campo. Hibernate también asigna las propiedades de estilo de Java Bean a DB Schema. Hibernate Acceda a los campos para cargar / guardar el objeto. Si la asignación se realiza por propiedad, hibernate usa getter y setter.
Es la encapsulación que diferencia los medios donde tienes getter / setters para un campo y se llama property, con eso y ocultamos la estructura de datos subyacente de esa propiedad dentro de setMethod, podemos evitar cambios no deseados dentro de setters. Todo lo que encapsula es ...
Los campos deben declararse e inicializarse antes de ser utilizados. Principalmente para uso interno de clase.
Las propiedades pueden ser cambiadas por setter y son expuestas por getters. Aquí el precio del campo tiene getter / setters por lo que es propiedad.
class Car{
private double price;
public double getPrice() {…};
private void setPrice(double newPrice) {…};
}
<class name="Car" …>
<property name="price" column="PRICE"/>
</class>
De manera similar, al usar los campos , [In hibernate es la forma recomendada de MAP usar campos, donde private int id; está anotado @Id, pero con Property tienes más control]
class Car{
private double price;
}
<class name="Car">
<property name=" price" column="PRICE" access="field"/>
</class>
El documento Java dice: Field es un miembro de datos de una clase. Un campo es variable de instancia no transitoria y no estática. El campo generalmente es una variable privada en una clase de instancia.