简体   繁体   English

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

[英]How to use enum in a parameterized constructor?

I have an assignment that asks me to create enumeration types. 我有一个任务要求我创建枚举类型。 My question is, after I initialize them, how do I bring them into the default and parameterized constructors? 我的问题是,在我初始化它们之后,如何将它们引入默认和参数化构造函数? i tried the following but it doesn't work... any ideas? 我试过以下但它不起作用......任何想法? Thanks 谢谢

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

    }
}

This is a type definition: 这是一个类型定义:

private enum paperQuality ...

But you don't actually have a field of that type declared. 但是你实际上没有声明该类型的字段。 Try something like this: 尝试这样的事情:

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

The first line defines the PaperQuality enum, defining the various values that any PaperQuality can hold. 第一行定义PaperQuality枚举,定义任何PaperQuality可以容纳的各种值。 The second line creates a private field that is of that type, named paperQuality . 第二行创建一个属于该类型的私有字段,名为paperQuality The constructor could look like this: 构造函数可能如下所示:

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

You've declared the type but not the instance. 您已声明了类型,但未声明实例。 You'll want... 你会想......

        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
        }

I suggest you read a tutorial on Java enums. 我建议你阅读关于Java枚举的教程。

enum keyword is like class keyword: it defines a type, not a variable. enum关键字就像class关键字:它定义了一个类型,而不是一个变量。

You code is similar to the following: 您的代码类似于以下内容:

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

For instance, you can create enum in the body of class 例如,您可以在类的主体中创建枚举

enum Sex {
    MALE,
    FEMALE
}

Also, you can create a separate class. 此外,您可以创建一个单独的类。 Then declare the variable with enum type,and in the parentheses of the constructor, specify the type that you created 然后使用枚举类型声明变量,并在构造函数的括号中指定您创建的类型

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;
}
private enum paperQuality {LOW, NORMAL, HIGH};
private enum issuingFrequency {WEEKLY, MONTHLY, YEARLY};

First create a variable for the enum type. 首先为枚举类型创建一个变量。

paperQuality paperqual;
issuingFrequency issuingfre;

then you can use those enum variable to assign values 然后你可以使用那些枚举变量来赋值

public Magazine() {
    paperqual= null;  
    issuingfre= null;   
}

public Magazine (paperQuality pq,issuingFrequency isq) {
   paperqual = pq;
   issuingfre = isq;
}

Declare a variable of the enumerated type: 声明枚举类型的变量:

private paperQuality quality;

( enum paperQuality { ... } just defines the enum type, it does not create a variable!). enum paperQuality { ... }只定义枚举类型,它不会创建变量!)。

Also, you cannot assign null to an enumerated type, it must be one of the enumerated values (ie LOW ). 此外,您不能将null赋值给枚举类型,它必须是枚举值之一(即LOW )。

enum isn't a datatype its more like the "class" keyword. 枚举不是数据类型,更像是“class”关键字。 The datatypes in your example are paperQuality and issuingFrequency. 示例中的数据类型为paperQuality和issuingFrequency。 So: 所以:

public Magazine (double price,
     int numberOfPages,
     paperQuality quality,
     issuingFrequency freq) {

} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM