0

我从服务器获得了这样的 JSON,并希望将其解析为我的对象:

"product":{
"product_type":"assignment",
"id":717,
    "product_profile":{
    "title":"new Order from java",
    "info":"Some special info",
    "dtl_expl":true,
    "special_info":""
    }
}

取决于“product_type”值,我从服务器获得不同的“product_profile”值。“product_profile”可以是三种类型之一。我为他们每个人创建了课堂演示。但问题是,由于 OOP 原则,如何将 JSON 对象的正确解析组织到我的 Product 类中?我应该创建接口并在我的三个类中的每一个中实现它,还是我应该创建一个父类并在我的三个类中扩展它以使其正常工作?

我的班级结构。首先是 Product 类,我应该从 json 得到它的对象:

 public class Product {
    ProductAssignment prodAss;
    ProductWriting prodWr;
    ProductType returnState;

    @SerializedName("id")
    int id;
    @SerializedName("product_type")
    String product_type;
    @SerializedName("product_profile")
    ProductType product_profile;

    public Product()
    {}
    public Product(int id, String product_type, ProductType product_profile)
    {
        this.id = id;
        this.product_type = product_type;
        this.product_profile = product_profile.returnObject(product_type);
    }

    public int getProductId() 
    {

         return this.id;
    }
    public String getProductType() 
    {
         return this.product_type;
    }
    public ProductType getProduct() 
    {
         return product_profile.returnObject(product_type);
    }
    public void setProductId(int id) 
    {
        this.id = id;
    }
    public void setProductTitle(String product_type) 
    {
        this.product_type = product_type;
    }
    public void setProduct(ProductType product_profile) 
    {
        this.product_profile = product_profile;
    }
    @Override
    public String toString() {
        return "id=" + id + " " + "title=" + product_type
                + " " + "profile=" + product_profile  +  "}";
    }

}

现在父类 ProductType 有两个子类:

    public class ProductType extends ProductType{
    String product;

    static ProductType productType;
    static ProductAssignment productAssignment;
    static ProductWriting productWriting;
    IProductType component;

    private ProductType returnState;
    ProductAssignment prodAss;
    ProductWriting prodWr;
    public ProductType()
    {       
    }
    public ProductType(IProductType c)
    {
         component = c;
    }
   // implemented method of interface
    @Override
    public ProductType returnObject(String product_type) 
    {
        System.out.println("ProductType");
        if (product_type.equals("assignment"))
            returnState =  prodAss.returnObject(product_type);
        else if  (product_type.equals("writing"))
            returnState =  prodWr.returnObject(product_type);
        System.out.println(returnState.getClass().getName());
        return returnState;
    }
}

子类之一:

public class ProductWriting extends ProductType{

    @SerializedName("id")
    int id;
    @SerializedName("title")
    String title;
    @SerializedName("pages_number")
    int pages_number;
    @SerializedName("number_of_references")
    String number_of_references;
    @SerializedName("dtl_expl")
    boolean dtl_expl;
    @SerializedName("info")
    String info;



public ProductWriting()
        {}
        public ProductWriting(String title, String info, boolean dtl_expl, 
                int pages_number ,
                int id,String number_of_references)
        {
            this.title = title;
            this.info = info ;
            this.dtl_expl = dtl_expl;
            this.id = id;
            this.pages_number = pages_number;
            this.number_of_references = number_of_references;

        }
        public ProductWriting(IProductType c){
            super(c);
        }
        // getters and setters

         @Override
         public ProductType returnObject(String res) {
             System.out.println("Writing");    
               super.returnObject(res);
                 return new ProductWriting();
         }

}

另一个 :

public class ProductAssignment extends ProductType{
ProductAssignment thisObj;
@SerializedName("title")
String title;
@SerializedName("info")
String info;
@SerializedName("dtl_expl")
boolean dtl_expl;
@SerializedName("special_info")
String special_info;
@SerializedName("shoot_exclusive_video")
boolean shoot_exclusive_video;
@SerializedName("shoot_common_video")
boolean shoot_common_video;
public ProductAssignment()
{}
public ProductAssignment(String title, String info, boolean dtl_expl, String special_info,
        boolean shoot_common_video, boolean shoot_exclusive_video)
{

    this.title = title;
    this.info = info ;
    this.dtl_expl = dtl_expl;
    this.special_info = special_info;
    this.shoot_common_video = shoot_common_video;
    this.shoot_exclusive_video =shoot_exclusive_video;
}
// getters and setters

 @Override
 public  ProductType returnObject(String res) {
     System.out.println("Assignment");
     super.returnObject(res);
         return new ProductAssignment();
 }
@Override
public String toString()
{
    return "title=" + title + "info " + "=" + info
            + " " + "profile=" + dtl_expl +  "}";
}

}

绑定我的类的接口:

    public interface IProductType 
{
     ProductType returnObject(String parse);
}

我试图以这种方式实现,但它现在不起作用。

4

0 回答 0