我正在学习工厂方法,我试图使用它们来编写类。
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。
我对工厂方法的实现是错误的还是我没有看到的其他内容?
答案 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
它显示了如何使用自定义构造函数和自定义方法编写和使用枚举。