【问题标题】:How do you implement an enum in an object class - Java?您如何在对象类中实现枚举 - Java?
【发布时间】:2018-02-05 17:03:04
【问题描述】:
这是我第一次在课堂上使用枚举。我想创建一个 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(){
//???
}
}
【问题讨论】:
标签:
java
class
object
enums
constructor
【解决方案1】:
不完全是。
PizzaSize 是一个枚举,你已经正确地声明了。
但是,您将 PizzaSize 枚举误认为是为任何特定的 Pizza 实例保存此值的实例成员。
您应该创建一个额外的私有成员变量,称为private pizzaSize,并且您的构造函数应该这样做
this.pizzaSize = PizzaSize.medium;
然后,在您的 getSize() 方法中,您应该返回 this.pizzaSize;
此外,您的setSize(PizzaSize newpizza) 应包含this.pizzaSize = newpizza
【解决方案2】:
虽然您已经创建了 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;
}
}
//这样对吗?
Pizza(){
PizzaSize newpizza= PizzaSize.medium; //Is this correct?
numcheese = 1;
numpep =0;
numham=0;
}
不是真的。因为您将 PizzaSize 的范围仅限于此构造函数。 PizzaSize 类型的变量在构造函数之外不再可访问。
【解决方案3】:
有两种可能的解决方案:
- 将
pizzasize 字段的类型更改为PizzaSize
- 使用
ordinal枚举值方法:pizzasize = newpizza.ordinal(); - 它返回原始枚举中的枚举值索引。