在我的项目中,我有一个小型数据结构Key
。
public class Key implements Serializable {
private static final long serialVersionUID = 1L;
public String db;
public String ref;
public Object id;
protected Key() {
}
public Key(String db, String ref, Object id) {
this.db = db;
this.ref = ref;
this.id = id;
}
}
是的,这个课程很简单,每个领域都可公开访问。
但是有人建议我使用 POJO 样式课程,但当我问他们为什么无法告诉我时。
在我看来,调用 getters 和 setters 比直接访问字段要慢。
那么为什么我必须使用 POJO 编程风格?
答案 0 :(得分:18)
取自维基百科:
POJO是Plain Old Java Object的首字母缩写。该名称用于 强调给定对象是普通的Java对象,而不是 特殊对象。
POJO通常很简单,因此不依赖于其他库,接口或注释。这增加了在多种项目类型(Web,桌面,控制台等)中重用它的可能性。
正如有人已经在评论中指出的那样,你的对象在技术上已经是一个POJO但是你已经特别询问了更类似于JavaBeans的getter和setter。
我可以考虑使用getter和setter的原因有很多:
getFullName()
,它是getFirstName()
和getLastName()
的串联,由字段支持。是的,通过方法调用访问或设置值可能比直接字段访问慢,但差别几乎不明显,它肯定不会成为程序的瓶颈。
虽然优点很明显,但这并不意味着吸气剂和制定者是银弹。在设计真实世界,强大的可扩展类时,需要考虑许多“陷阱”。
This回答一个非常相似的问题,在设计一个有getter和setter的类时会详细考虑一些注意事项。虽然根据您正在设计的班级类型,建议可能更相关。一个类,它构成了大型系统中API的一部分,而不是简单的数据传输对象。
另请注意,在某些情况下,具有直接字段的类可能是有利的,例如当速度必不可少或内存有限时尽管这应该仅在分析代码并发现它实际上是瓶颈强>
另外要注意的是,您不仅要在getter和setter中包含所有字段,因为这实际上缺少封装点。
This回答提供了使用getter和setter选择POJO而不是JavaBean样式对象的原因。
答案 1 :(得分:5)
使用私有类变量和公共getter和setter,它们将为您提供Encapsulation。
答案 2 :(得分:3)
Getter和setter,尤其是最简单的形式,只需要由JIT编译器内联,从而消除方法调用开销。这听起来非常像过早优化。如果你获得瓶颈,那么剖析并查看它发生的位置。我相当肯定它不属于财产访问。
答案 3 :(得分:3)
获得“有效Java”一书。
在这个Joshua Bloch中说,包私有或嵌套类中的公共字段没有任何遗传错误,但强烈建议不要使用公共类。
他详细介绍了这个主题,这是一本很棒的书,建议你复印一份。
答案 4 :(得分:1)
想象一下,如果其他程序员正在使用您的代码。如果你不提供setter和getter方法,那么他可以直接调用你的变量,这肯定会影响你的代码。它可能会导致安全问题 因此,通过提供POJO类,您迫使他调用您的方法而不是直接调用您的Instance变量。