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 类的问题。