Java POJO中的field,variable,attribute和property有什么区别?
当引用具有getter / setter的Java POJO的内部私有variables时,我使用了以下术语:
- 领域
- variables
- 属性
- 属性
上面有没有区别? 如果是这样,那么正确的术语是什么? 当这个实体被保存时是否有不同的术语?
从这里: http : //docs.oracle.com/javase/tutorial/information/glossary.html
-
领域
- 一个类的数据成员。 除非另外指定,否则字段不是静态的。
-
属性
- 用户可以设置的对象的特征,例如窗口的颜色。
-
属性
- 未在上述术语表中列出
-
variables
- 一个由标识符命名的数据项。 每个variables都有一个types,例如int或Object和一个作用域。 另请参阅类variables,实例variables,局部variables。
就在这里。
variables可以是本地,字段或常量(虽然这在技术上是错误的)。 它像属性一样模糊。 此外,你应该知道一些人喜欢调用最终的非静态(本地或实例)variables
“ 价值观 ”。 这可能来自新兴的JVM FP语言,如Scala。
字段通常是一个实例类的私有variables。 这并不意味着有一个getter和一个setter。
属性是一个模糊的术语。 它可以很容易地与XML或Java命名API混淆。 尽量避免使用这个术语。
属性是getter和setter组合。
下面的一些例子
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; } }
还有更多的组合,但我的手指越来越累了:)
如果您的问题是使用JAXB提示的,并且想要select正确的XMLAccessType
,那么我有同样的问题。 JAXB Javadoc说“字段”是一个非静态的,非瞬态的实例variables。 一个“属性”有一个getter / setter对(所以它应该是一个私有variables)。 “公共成员”是公开的,因此可能是一个常数。 同样在JAXB中,“属性”是指XML元素的一部分,如在<myElement myAttribute="first">hello world</myElement>
。
一般来说,一个Java“属性”可以被定义为一个至less有一个getter或者其他公有方法的字段,这个方法可以让你获得它的价值。 有些人还说,一个财产需要一个二传手。 对于这样的定义,上下文就是一切。
Dietel和Dietel有一个很好的解释领域与variables的方法。
“一个类的静态variables和实例variables一起被称为它的字段”(6.3节)
“variables应该被声明为字段,只要它们被要求用于多于一个类的方法,或者程序应该在调用类的方法之间保存它们的值。”(6.4节)
所以一个类的字段是它的静态variables或实例variables – 即用类作用域声明。
参考资料 – Dietel P.,Dietel,H. – Java™如何编程(早期对象),第十版(2014年)
如果你从Hibernate中获得线索:
Hibernate用它的字段读/写Object的状态。 Hibernate还将Java Bean样式属性映射到DB架构。 Hibernate访问加载/保存对象的字段。 如果映射是由属性完成的,hibernate使用getter和setter。
它是封装区分的意思,你有一个字段的getter / setter,它被称为属性,并且我们隐藏了setMethod中该属性的底层数据结构,我们可以防止setter方法中不需要的更改。 所有封装代表什么…
字段必须在使用之前声明和初始化。 主要用于课堂内部使用。
属性可以被setter改变,并且被getter暴露。 这里现场价格有getter / setter,所以它是财产。
class Car{ private double price; public double getPrice() {…}; private void setPrice(double newPrice) {…}; } <class name="Car" …> <property name="price" column="PRICE"/> </class>
同样使用字段 ,[在hibernate,这是推荐的方式使用字段,其中私人诠释ID; 被注释@Id,但与财产,你有更多的控制]
class Car{ private double price; } <class name="Car"> <property name=" price" column="PRICE" access="field"/> </class>
Java doc说:Field是一个类的数据成员。 一个字段是非静态的,非瞬态的实例variables。 字段通常是一个实例类的私有variables。
variables由字段和非字段组成。
字段可以是:
- 静态字段或
- 非静态字段也称为实例,例如x = F()
非字段可以是:
- 局部variables,字段的类比,但内部的方法,而不是所有的外部,或
- 参数例如y in x = f(y)
总之,variables之间的关键区别在于它们是字段还是非字段,意味着它们是在方法内还是在所有方法之外。
基本的例子(对不起,我的语法,我只是一个初学者)
Class { //fields method1 { //non-fields } }
其实这两个词经常被用来代表同样的东西,但也有一些特殊的情况。 一个字段可以存储一个对象的状态。 而且所有的字段都是variables。 所以很显然,可以有不是领域的variables。 因此,查看4种types的variables(类variables,实例variables,局部variables和参数variables),我们可以看到类variables和实例variables可以影响对象的状态。 换句话说,如果一个类或实例variables发生变化,对象的状态就会改变。 所以我们可以说类variables和实例variables是字段,而局部variables和参数variables则不是。
如果你想深入了解,你可以转到下面的来源:
问题是旧的,但variables和字段之间的另一个重要区别是字段在声明时会获取默认值。另一方面,variables必须初始化。
我的理解如下,我不是说这是100%正确的,我不太可能被误解。
一个variables是你声明的东西,它可以在默认情况下改变并具有不同的值,但也可以明确地说是最终的。 在Java中,这将是:
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(); } }
所以基本上,一个variables就是声明的任何东西,并且可以保存值。 上面的方法foo返回一个variables,例如..它返回一个Integertypes的variables,它保存新的Integer()的内存地址; 你在上面看到的其他东西也是variables,listVariable,aFinalVariableExample,并在这里解释:
一个字段是一个范围更清晰(或具体)的variables。 在上面的例子中,从foo方法返回的variables是不清楚的,所以我不会把它称为一个字段。 另一方面,iAmAlsoVariable是一个“本地”字段,受方法foo的作用域限制,而listVariable是一个“实例”字段,字段(variables)的作用域被对象作用域所限制。
属性是可以被访问/变异的字段。 公开getter / setter的任何字段都是属性。
我不知道属性,我也想重申一下,这是我对variables,属性和属性的理解。