Java POJO 类
原文:https://www.studytonight.com/java-examples/java-pojo-class
POJO 代表普通旧 Java 对象。它们是没有限制的普通物体。他们不受任何框架的约束。它们易于创建,增加了代码的可读性和可重用性。在本教程中,我们将了解更多关于 POJO 的信息。
普通旧 Java 对象
如上所述,这些对象没有任何限制。它们可以以任何方式创建和使用。POJO 的方法和属性不需要遵循任何命名约定。
示例类中显示了一个 POJO 示例。它包含三个属性。这些属性不遵循任何特定的访问规则。字段 1 是公共的,而字段 2 是私有的。没有固定的约定用来定义设置者和获取者。字段 1 和字段 3 有 getters,但类中没有使用 setters。
//POJO
public class Sample
{
public String field1;
private int field2;
double field3;
Sample(String s, int i, double d)
{
this.field1 = s;
this.field2 = i;
this.field3 = d;
}
public String getField1()
{
return this.field1;
}
public double getField3()
{
return this.field3;
}
}
有一些东西不应该成为任何 POJO 类的一部分。
- 一个 POJO 类不应该扩展任何类。
- 它不应该实现任何接口。
- POJO 不应包含任何预先指定的注释。
由于缺乏约定,POJO 类可能很难被其他程序员理解。当使用反射 API 分析时,POJO 类可能无法完美地工作。例如,如果我们试图查看前面定义的 POJO 类的属性,那么我们将不会得到预期的结果。字段 2 的数据丢失。
public static void main(String[] args)
{
Sample s = new Sample("f1", 0, 0.0);
try
{
Map<String, Object> properties = BeanUtils.describe(s);//Fetching object class details
for(Map.Entry<String, Object> e : properties.entrySet())
System.out.println(e.getKey() + "->" + e.getValue());
}
catch(Exception e)
{
System.out.print(e);
}
}
field 1->f1 field 3->0.0 级- >级样品
组件
Java Bean 类是一种特殊类型的 POJO 类。所有的 Java Bean 类都是 POJO,但并不是所有的 POJO 都可以称为 Java Bean。为了纠正 POJO 类的一些问题,Java Bean 类必须遵循一些标准的规则和约定。下面给出了一个 Java Bean 类应该遵循的约定。
- 所有类属性必须是私有的。
- 必须编写标准的 Getter 和 Setter 方法。
- 需要创建一个默认无参数构造器。
- 这个类必须实现 Serializable 接口。
让我们将示例 POJO 类转换成一个 Java Bean 类。
import java.io.Serializable;
//JavaBean
public class Sample implements Serializable//Class must implement Serializable
{
//All fields must be private
private String field1;
private int field2;
private double field3;
//A default no-argument constructor must be present
Sample()
{}
Sample(String s, int i, double d)
{
this.field1 = s;
this.field2 = i;
this.field3 = d;
}
//Getters and Setters must be present for all fields
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public int getField2() {
return field2;
}
public void setField2(int field2) {
this.field2 = field2;
}
public double getField3() {
return field3;
}
public void setField3(double field3) {
this.field3 = field3;
}
}
现在,我们还可以使用反射来查看属性。所有三个字段都显示在输出中。
public static void main(String[] args)
{
Sample s = new Sample("f1", 0, 0.0);
try
{
Map<String, Object> properties = BeanUtils.describe(s);
for(Map.Entry<String, Object> e : properties.entrySet())
System.out.println(e.getKey() + "->" + e.getValue());
}
catch(Exception e)
{
System.out.print(e);
}
}
field 1->f1 field 3->0.0 class->class 样本 field2- > 0
Java Bean 类解决了 POJO 类的一些问题,但是它们并不完美。我们的 Java Bean 类必须为每个属性都有一个 getter 和 setter 方法,即使对它没有要求。由于强制 setter 方法的存在,Java Bean 类属性是可变的。默认构造器在某些情况下是不需要的,但是对于一个 Java Bean 类来说是必需的。
摘要
POJO 或普通的旧 Java 对象是简单的对象,不需要遵循任何严格的约定。用户可以用任何方式创建 POJO 类。Java Bean 类试图通过在它们身上强加一组规则来解决 POJO 类的问题。