如何在参数化构造函数中使用枚举?
我有一个任务,要求我创建枚举类型。我的问题是,我初始化它们后,如何将它们带入默认和参数化构造函数?我尝试了以下,但它不工作...任何想法?由于如何在参数化构造函数中使用枚举?
package magazine;
import paperPublication.PaperPublication;
public class Magazine extends PaperPublication {
private enum paperQuality {LOW, NORMAL, HIGH};
private enum issuingFrequency {WEEKLY, MONTHLY, YEARLY};
public Magazine() {
paperQuality = null; //doesn't work
issuingFrequency = null; //doesn't work
}
public Magazine (double price, int numberOfPages, enum paperQuality //doesn't work, enum issuingFrequency //doesn't work) {
}
}
这是一种类型定义:
private enum paperQuality ...
但你实际上并没有对该类型中声明的领域。尝试是这样的:
private enum PaperQuality {...};
private PaperQuality paperQuality;
第一行定义的PaperQuality枚举,定义,任何PaperQuality可以容纳不同的价值观。第二行创建一个名为paperQuality
的专用字段。构造函数看起来是这样的:
public Magazine (double price, int numberOfPages, PaperQuality paperQuality) {
...
this.paperQuality = paperQuality;
}
非常感谢,为我解决了它! – jsan 2012-02-06 17:03:22
@jsan:我很高兴得到了帮助。如果这足以回答您的问题,请将其标记为“答案”,以便人们知道您已得到您正在寻找的答案。 – StriplingWarrior 2012-02-06 18:29:41
声明枚举类型的变量:
private paperQuality quality;
(enum paperQuality { ... }
只定义枚举类型,它不创建一个变量!)。
此外,您不能将null
分配给枚举类型,它必须是枚举值之一(即LOW
)。
您声明了类型而不是实例。你会想...
public enum PaperQuality {LOW, NORMAL, HIGH};
public enum IssuingFrequency {WEEKLY, MONTHLY, YEARLY};
PaperQuality paperQuality;
IssuingFrequency issuingFrequency;
public Magazine() {
paperQuality = null;
issuingFrequency = null;
}
public Magazine (double price, int numberOfPages, PaperQuality paperQuality){
//logic here
}
我建议你阅读关于Java枚举的教程。
enum
关键字就像class
关键字:它定义了一个类型,而不是一个变量。
你的代码是类似以下内容:
public class Magazine extends PaperPublication {
private class paperQuality { /* something */ }; // note class instead of enum
private class issuingFrequency { /* something */ };
public Magazine() {
paperQuality = null; //doesn't work -- beacuse paperQuality is a class
paperQuality a; // does work because class name is suitable for variable definition
a = null; // you can assign null to class variables
枚举不是数据类型其更像是“类”的关键字。您示例中的数据类型为paperQuality和issuedFrequency。所以:
public Magazine (double price,
int numberOfPages,
paperQuality quality,
issuingFrequency freq) {
}
我的答案与此处所有其他人的答案相同。有人想解释倒票吗? – Kyle 2012-02-06 17:13:38
举例来说,你可以在类的主体
enum Sex {
MALE,
FEMALE
}
还可以创建枚举,您可以创建一个单独的类。然后声明与枚举类型变量,并在构造函数的括号,注明您创建
private Sex enSex;
private String personName;
private int personAge;
private double personWeight;
public Person(String name, int age, double weight, Sex enSex) {
this.personName = name;
this.personAge = age;
this.personWeight = weight;
this.enSex = enSex;
}
没有什么比官方教程更好类型:http://docs.oracle.com/javase/tutorial/ java/javaOO/enum.html – biziclop 2012-02-06 16:22:24
不直接相关,但是如果枚举是私有的,那么除了自身之外,没有人能够构造这个类的实例。有人纠正我,如果我错了。 – 2012-02-06 17:21:04