Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在对象类Java中实现枚举?_Java_Class_Object_Enums_Constructor - Fatal编程技术网

如何在对象类Java中实现枚举?

如何在对象类Java中实现枚举?,java,class,object,enums,constructor,Java,Class,Object,Enums,Constructor,这是我第一次在类中使用enum。我想创建一个Pizza类,这样用户就可以创建一个Pizza对象,然后设置大小,获取大小,设置奶酪的数量等等Pizza()是初始化Pizza对象而不带参数的默认构造函数。谢谢 package PizzaPackage; public class Pizza { private enum PizzaSize { small, medium, large } protected int numcheese; protected int numpep; prot

这是我第一次在类中使用enum。我想创建一个Pizza类,这样用户就可以创建一个Pizza对象,然后设置大小,获取大小,设置奶酪的数量等等
Pizza()
是初始化Pizza对象而不带参数的默认构造函数。谢谢

package PizzaPackage;

public class Pizza {
private enum PizzaSize {
    small, medium, large }
protected int numcheese;
protected int numpep;
protected int numham;

Pizza(){
     PizzaSize newpizza= PizzaSize.medium; //Is this correct?
     numcheese = 1;
     numpep =0;
     numham=0;
}
public int getnumcheese() {
    return this.numcheese;

}

public int getnumpep() {
    return this.numpep;
}

public int getnumham() {
    return this.numham;
}

public void setSize(PizzaSize newpizza){
    //???

}
public PizzaSize getSize(){
    //???
}
}

尽管您已经创建了Enum,但您忘记将其作为实例成员,就像您的其他实例成员
numcheese
numpep
等一样

PizzaSize newpizza;
将其声明为成员并使用它

package PizzaPackage;

public class Pizza {
private enum PizzaSize {
    small, medium, large }
protected int numcheese;
protected int numpep;
protected int numham;
PizzaSize newpizza;

Pizza(){
     newpizza= PizzaSize.medium; //Is this correct?
     numcheese = 1;
     numpep =0;
     numham=0;
}
public int getnumcheese() {
    return this.numcheese;

}

public int getnumpep() {
    return this.numpep;
}

public int getnumham() {
    return this.numham;
}

public void setSize(PizzaSize newpizza){
    this.PizzaSize newpizza = newpizza;

}
public PizzaSize getSize(){
    return newpizza;
}
}

//这是正确的吗

不是真的。因为您将
PizzaSize
的范围仅限于此构造函数。
PizzaSize
类型的变量在构造函数之外无法访问

不完全是

PizzaSize是一个枚举,您已经正确地声明了它

但是,您将PizzaSize枚举误认为是实例成员,该成员为Pizza的任何特定实例保存此值

您应该创建一个额外的私有成员变量,称为
private pizzaSize
,您的构造函数应该这样做

this.pizzaSize=pizzaSize.medium

然后,在
getSize()
方法中,应该返回
this.pizzaSize


此外,您的
setSize(PizzaSize newpizza)
应该包含
this.PizzaSize=newpizza

有两种可能的解决方案:

  • pizzasize
    字段的类型更改为
    pizzasize
  • 使用枚举值的
    ordinal
    方法:
    pizzasize=newpizza.ordinal()-返回原始枚举中枚举值的索引

  • 欢迎来到堆栈溢出!带上,环顾四周,通读,尤其是和。请阅读并遵循
    Pizza(){
         PizzaSize newpizza= PizzaSize.medium; //Is this correct?
         numcheese = 1;
         numpep =0;
         numham=0;
    }