簡體   English   中英

如何在參數化構造函數中使用枚舉?

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

我有一個任務要求我創建枚舉類型。 我的問題是,在我初始化它們之后,如何將它們引入默認和參數化構造函數? 我試過以下但它不起作用......任何想法? 謝謝

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

您已聲明了類型,但未聲明實例。 你會想......

        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

例如,您可以在類的主體中創建枚舉

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

首先為枚舉類型創建一個變量。

paperQuality paperqual;
issuingFrequency issuingfre;

然后你可以使用那些枚舉變量來賦值

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

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

聲明枚舉類型的變量:

private paperQuality quality;

enum paperQuality { ... }只定義枚舉類型,它不會創建變量!)。

此外,您不能將null賦值給枚舉類型,它必須是枚舉值之一(即LOW )。

枚舉不是數據類型,更像是“class”關鍵字。 示例中的數據類型為paperQuality和issuingFrequency。 所以:

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

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM