对象不返回期望值

时间:2018-08-27 14:50:34

标签: java factory-method

我正在学习工厂方法,我试图使用它们来编写类。

 public enum Animal{  
    DOG(1), CAT(2), PIG(3);  

    private int code;

    public static Animal dog(){  
    return DOG; }  
    public static Animal cat(){  
    return CAT; }    
    public static Animal pig(){  
    return PIG; } 

 public Animal(){  
    switch(this):  
       case DOG: {this.code=1;}  
       case CAT: {this.code=2;}  
       case PIG: {this.code=3;}
 }

 public Animal(int i){  
    if(i==1){return DOG;}
    else if(i==2){return CAT;}  
    else if(i==3){return PIG;}
}

 public int code(){return this.code}  

好,所以现在的问题是我为ex创建了新对象。 Animal pet = dog(); 但是,当我尝试询问代码时,我得到了0

system.out.print(pet.code()); 

结果为0。
我对工厂方法的实现是错误的还是我没有看到的其他内容?

1 个答案:

答案 0 :(得分:0)

您的示例代码为Animal pet = dog();,但示例代码中没有dog()方法。

在下面假设方法dog()返回Animal.DOG

请删除无参数构造函数。真是令人困惑。当对象没有完全初始化时,可以在构造函数中使用this

您应该只有一个(参数化的)构造函数。 同样,参数化的构造函数不应具有开关。该构造函数应仅基于参数上的值来关联成员变量code

public Animal(int code){  
    this.code=code;
}

另外,private int code;字段应为final

如果您需要更多详细信息,请查阅官方文档(带有enum Planet的第二个示例) https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 它显示了如何使用自定义构造函数和自定义方法编写和使用枚举。