2017-05-19 13 views
0
public enum ProductCategory { 
    FOOD, BEVERAGE, DEFAULT; 

private final String label; 

private ProductCategory(String label){ 
this.label = label; 
} 

public String getLabel(){ 
     return label; 
} 

この列挙型クラスでは、getLabel()メソッドを実装したいと思いますが、「生成されたProductCategory()は未定義です」というエラーが表示されます。コンストラクタ列挙型エラー

私はすでに必要なコンストラクタを持っていますが、それ以外に何が必要ですか?私はデフォルトのコンストラクタを書き込もうとしましたが、もう一度エラーが発生しています。

P.S.私はjavaの初心者です。

+0

private'が冗長である 'として列挙コンストラクタを指定するサイドノートとして。 –

+0

[Javaを使用して列挙型を宣言するにはどうすればいいですか](0120-18753) – Yahya

+0

デフォルトのコンストラクタを記述することはできません。デフォルトコンストラクタは、コンストラクタが記述されていないクラス用にコンパイラによって提供されるコンストラクタです。 –

答えて

3

エラーがenumメンバーの宣言から来ている:コンストラクタはString labelがかかるため、あなたはそのコンストラクタに渡す文字列を指定する必要があります。

FOOD("food"), BEVERAGE("bev"), DEFAULT("[default]"); 
1

あなたが現在持っているのみコンストラクタが必要です渡される文字列 - すべての列挙値(FOOD,BEVERAGEDEFAULTは、コンストラクタを呼び出すことができないように文字列を指定しません。

つのオプション:

  • は、パラメータなしのコンストラクタを追加します。

    private ProductCategory() {} 
    

    これはしかし、あなたの列挙値とラベルを関連付けないでしょう。

  • は、各値のラベルを指定します。

    FOOD("Food"), BEVERAGE("Beverage"), DEFAULT("Default"); 
    

後者は、ほぼ確実にあなたが望むものです。

0

列挙型コンストラクタは、列挙型メンバ自体を宣言するときに呼び出すことができます。

public enum ProductCategory 
    { 
     FOOD("label1"), 
     BEVERAGE("label2"), 
     DEFAULT("label3"); 

     private final String label; 

     ProductCategory(String label) 
     { 
      this.label = label; 
     } 

     public String getLabel() 
     { 
      return label; 
     } 
    } 
0
public enum ProductCategory { 
    FOOD("FOOD"), BEVERAGE("BEVERAGE"), DEFAULT("DEFAULT"); 

    private final String label; 

    private ProductCategory(String label) { 
     this.label = label; 
    } 

    public String getLabel() { 
     return label; 
    } 
}