2012-02-06 14 views
3

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

を作成したタイプを指定:http://docs.oracle.com/javase/tutorial/をjava/javaOO/enum.html – biziclop

+1

直接関係はありませんが、列挙型が非公開の場合、誰も自身以外のこのクラスのインスタンスを構築することはできません。私が間違っていると誰かが私を修正します。 –

答えて

6

これは型定義である:

private enum paperQuality ... 

しかし、あなたが実際に宣言し、その型のフィールドを持っていません。

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

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

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

ありがとう、私のためにそれをクリア! – jsan

+0

@jsan:私は助けてうれしいです。これがあなたの質問に十分に答えた場合は、それを「回答」としてマークして、人々があなたが探していた答えを得ていることを知ってください。 – StriplingWarrior

0

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

private paperQuality quality;

enum paperQuality { ... }ちょうどそれが変数を作成していない、列挙型を定義します!)。

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

4

タイプは宣言していますが、インスタンスは宣言していません。あなたはしたいでしょう...

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

1

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 
-1

列挙型は、その多くの「クラス」のキーワードのようなデータ型ではありません。あなたの例のデータ型は、paperQualityとissuingFrequencyです。だから、:

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

} 
+0

私の答えはここの他のすべての答えと同じです。誰かがダウン投票を説明したいですか? – Kyle

0

たとえば、あなたが別のクラスを作成することができ、

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; 
} 
関連する問題