パラメータ化されたコンストラクタでenumを使用するには?

列挙型を作成するように指示する課題があります。私の質問は、初期化した後、どのようにそれらをデフォルトおよびパラメータ化されたコンストラクタに持っていくかです。私は以下を試みたが、それは動作しません...任意のアイデア?ありがとう

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
直接関係はありませんが、列挙型がプライベートである場合、誰も自身以外のこのクラスのインスタンスを構築することはできません。私が間違っていると誰かが私を修正します。
追加された 著者 Murat Derya Özen,
公式のチュートリアルより優れたものはありません: docs.oracle.com/javase/チュートリアル/ java/javaOO/enum.html
追加された 著者 biziclop,

7 答え

これは型定義です:

private enum paperQuality ...

しかし、実際に宣言された型のフィールドはありません。次のようなことを試してください:

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

最初の行は、PaperQuality列挙型を定義し、PaperQualityが保持できるさまざまな値を定義します。 2行目は、 paperQuality という名前のプライベートフィールドを作成します。コンストラクタは次のようになります。

public Magazine (double price, int numberOfPages, PaperQuality paperQuality) {
    ...
    this.paperQuality = paperQuality;
}
6
追加された
@山:私は助けてうれしいです。これがあなたの質問に十分に答えた場合は、それを「回答」としてマークして、人々があなたが探していた答えを得ていることを知ってください。
追加された 著者 StriplingWarrior,
ありがとう、私のためにそれをクリア!
追加された 著者 jsan,

型は宣言していますが、インスタンスは宣言していません。あなたが望むだろう...

        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 enumsのチュートリアルを読むことをお勧めします。

4
追加された

enum keyword is like class keyword: it defines a type, not a variable.

コードは次のようなものです。

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
1
追加された

enumは "class"キーワードのようなデータ型ではありません。あなたの例のデータ型は、paperQualityとissuingFrequencyです。そう:

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

} 
1
追加された
私の答えはここの他のすべての答えと同じです。誰かがダウン投票を説明したいですか?
追加された 著者 Kyle,

列挙型の変数を宣言します。

プライベートペーパー品質品質

enum paperQuality {...} はenum型を定義するだけで、変数は作成されません)。

また、列挙型に null を割り当てることはできません。列挙型の値( LOW )の1つである必要があります。

0
追加された

たとえば、クラスの本体にenumを作成することができます

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;
}
0
追加された
private enum paperQuality {LOW, NORMAL, HIGH};
private enum issuingFrequency {WEEKLY, MONTHLY, YEARLY};

まず、列挙型の変数を作成します。

paperQuality paperqual;
issuingFrequency issuingfre;

これらのenum変数を使用して値を割り当てることができます

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

public Magazine (paperQuality pq,issuingFrequency isq) {
   paperqual = pq;
   issuingfre = isq;
}
0
追加された