2017-07-17 9 views
2

私はいくつかの定数で列挙型を作成しようとしています。列挙型をシングルトンにしたい。以下のコードでは、私は日食でコンパイルエラーを取得しています:定数を持つ単一の列挙型

構文エラー、「)」を挿入し

は私がいただきました!間違って見つけることができないのですライン5でメソッドの宣言を完了します。

public enum Days { 

     SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY; 

     INSTANCE; // line 5 

     public Days getInstance() { 
     return INSTANCE; 
    } 
} 

答えて

5

enum宣言では、最後の列挙値の後に;が使用されます。

だからここに:

SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY; 
INSTANCE; 

これを削除する必要があります。

INSTANCE; 

私は列挙型はシングルトン

それはすでにケースですが、enumの値のためになりたいです(SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY)であり、それぞれがシングルトンである。

enumクラス自体はシングルトンではなく、そのように設計されていません。

代わりに、このように列挙型クラスにアクセスしようとしているの:

public Days getInstance() { 
    return INSTANCE; 
} 

利用だけでクラス:Days

+0

ここで私の理解を確認しましょう。1. Enumsはデフォルトではシングルトンであり、INSTANCE変数はシングルトンインスタンスへの参照を返します。 2. SUNDAY、MONDAYなどの定数のそれぞれについて、シングルトンインスタンスが作成されます。 –

+0

2番目の点はOKですが、最初の点はいいです。 Enumクラスは単なるクラスです。このクラスが提供する単一シングルトンは、宣言している列挙値(SUNDAY、MONDAYなど)で表されます。 – davidxxx

+0

Enumがデフォルトでシングルトンでない場合、シングルトンにする方法。私はまだ明確ではないので、助言してください。 –

0

ENUM変数の宣言を解除してから、もう一度やり直すことはできません。 INSTANCEを3行目にカンマで追加すると、プログラムをコンパイルできます。

土曜日、土曜日、木曜日、土曜日、土曜日、土曜日、土曜日;

1

INSTANCE行を削除し、静的にそうようなあなたの列挙型にアクセス:Days.MONDAY

列挙型はインスタンス化されることを意味しません。つまり、列挙型をシングルトンにしようとすることに意味がありません。

関連する問題