如何在参数化构造函数中使用枚举?

问题描述:

我有一个任务,要求我创建枚举类型。我的问题是,我初始化它们后,如何将它们带入默认和参数化构造函数?我尝试了以下,但它不工作...任何想法?由于如何在参数化构造函数中使用枚举?

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) { 

    } 
} 
+3

没有什么比官方教程更好类型:http://docs.oracle.com/javase/tutorial/ java/javaOO/enum.html – biziclop 2012-02-06 16:22:24

+1

不直接相关,但是如果枚举是私有的,那么除了自身之外,没有人能够构造这个类的实例。有人纠正我,如果我错了。 – 2012-02-06 17:21:04

这是一种类型定义:

private enum paperQuality ... 

但你实际上并没有对该类型中声明的领域。尝试是这样的:

private enum PaperQuality {...}; 
private PaperQuality paperQuality; 

第一行定义的PaperQuality枚举,定义,任何PaperQuality可以容纳不同的价值观。第二行创建一个名为paperQuality的专用字段。构造函数看起来是这样的:

public Magazine (double price, int numberOfPages, PaperQuality paperQuality) { 
    ... 
    this.paperQuality = paperQuality; 
} 
+0

非常感谢,为我解决了它! – jsan 2012-02-06 17:03:22

+0

@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) { 

} 
+0

我的答案与此处所有其他人的答案相同。有人想解释倒票吗? – 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; 
}