更好的方法来使用Pojo类

时间:2018-02-28 16:34:01

标签: android pojo

我有以下Api回复

{
"page": 1,
"per_page": 3,
"total": 12,
"total_pages": 4,
"data": [
{
"id": 1,
"first_name": "George",
"last_name": "Bluth",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
},
{
"id": 2,
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg"
},
{
"id": 3,
"first_name": "Emma",
"last_name": "Wong",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg"
}
]
}

我在大多数apis中都有以下反应

 {
    "page": 1,
    "per_page": 3,
    "total": 12,
    "total_pages": 4,

现在我已经关注

public class ApiBasePojo {

    @SerializedName("page")
    @Expose
    private Integer page;
    @SerializedName("per_page")
    @Expose
    private Integer perPage;
    @SerializedName("total")
    @Expose
    private Integer total;
    @SerializedName("total_pages")
    @Expose
    private Integer totalPages;
    @SerializedName("data")
    @Expose
    private List<UserPojo> userDetail = null;

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getPerPage() {
        return perPage;
    }

    public void setPerPage(Integer perPage) {
        this.perPage = perPage;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(Integer totalPages) {
        this.totalPages = totalPages;
    }

    public List<UserPojo> getData() {
        return userDetail;
    }

    public void setData(List<UserPojo> userDetail) {
        this.userDetail = userDetail;
    }
}

我担心的是每个pojo我必须重复页面,perpage,total,total_pages所以我正在寻找常见的pojo,我可以在任何需要的地方使用它。 我试过延伸,但不可能。 任何人都可以帮助我。谢谢。

Updated

假设我在base中添加常见内容并在userPojo中扩展它我无法在改造中设置值,因为List是集合 按照我的意思,我可以做这件事

public class MyBase {

    @SerializedName("page")
    @Expose
    private Integer page;
    @SerializedName("per_page")
    @Expose
    private Integer perPage;
    @SerializedName("total")
    @Expose
    private Integer total;
    @SerializedName("total_pages")
    @Expose
    private Integer totalPages;
    }


**UserPojo**  


public class UserPojo  {
    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("first_name")
    @Expose
    private String firstName;
    @SerializedName("last_name")
    @Expose
    private String lastName;
    @SerializedName("avatar")
    @Expose
    private String avatar;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

}

MyNewClass

  public class MyNewClass extends  MyBase{


        @SerializedName("data")
        @Expose
        private List<UserPojo> userDetail = null;

        }

所以现在我可以在我的改造中使用MyNewClass但是每次我需要一个这样的新类

1 个答案:

答案 0 :(得分:1)

通过将继承放在基类或接口中,您是否无法使用继承?大多数系统应该能够处理它。

我可能也会指出一些事情:(tl; dr)

有两个术语我觉得很困惑... Pojo是一个普通的旧Java对象,它没有任何限制,它不需要实现任何接口或任何要遵循的模式。通常这些都是你的注释。这些可能(并且应该绝对)包含业务逻辑。

Bean是不同的,bean的每个字段都有一个setter和一个getter,没有业务方法。

我提到差异,因为在这种情况下它真的很重要:

如果您拥有一组具有良好OO结构的业务类(避免使用setter,限制getter,封装等)并简单地注释成员以便与JSON数据一起使用,那么已经避免了您所讨论的问题(您的类会从公共基类继承,对吗?)

使用setter和getter创建bean框架然后继承仍然可以工作,但是你还需要一组并行的类来保存bean的业务逻辑,这很好我想但是那时候我就是这样。不确定以这种方式保持豆类干燥有多大好处,如果你正在经历所有这些努力,可能希望它们只是清楚地反映你的数据。