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

时间:2018-02-05 17:03:05

标签: 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;
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(){
    //???
}
}

3 个答案:

答案 0 :(得分:2)

不完全。

PizzaSize是一个枚举,你已经正确地声明了。

但是,你错误地认为PizzaSize枚举是一个实例成员,它为任何特定的Pizza实例保存了这个值。

你应该创建一个额外的私有成员变量,名为private pizzaSize,你的构造函数应该在做

this.pizzaSize = PizzaSize.medium;

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

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

答案 1 :(得分:1)

虽然您已创建了Enum,但您忘记将其作为实例成员,就像其他实例成员numcheesenumpep等一样。

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;
}
}
  

//这是对的吗?

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

不是真的。因为您只将PizzaSize的范围限制为此构造函数。类型PizzaSize的变量在构造函数之外不再可访问。

答案 2 :(得分:0)

有两种可能的解决方案:

  1. PizzaSize字段的类型更改为ordinal
  2. 使用枚举值的pizzasize = newpizza.ordinal();方法:boolean x = Arrays.asList(matrixA).contains("a"); - 它返回原始枚举中枚举值的索引。