列挙型その3

ではクラス内部で宣言してみる。
ついでに色々試してみる。

public class HogeClass {
  public enum Hoge3{
    //123;                //これはコンパイルエラー
    _A("A"), $b2("B");    //変数名と同じ制約
    
    public String arg;
    
    //コンストラクタ
    //public Hoge3(String arg){ //これはコンパイルエラー
    private Hoge3(String arg){
      this.arg = arg;
    }

    //publicなsetterは?
    public void setArg(String arg){
      this.arg = arg;
    }
  }

  public void print(){
    //public enum Hoge4{}   //メソッドローカルでは宣言できない
  }

}

コンストラクタがprivateのみだ。

//クラス名も入る
import hoge.enumtest.package2.HogeClass.Hoge3;
//↓これは同じパッケージに入れたとき
//import hoge.enumtest.HogeClass.Hoge3;

public class Test3 {

  public static void main(String[] args) {
    //本体を出力
    System.out.println(Hoge3._A);
    //中の変数
    System.out.println(Hoge3._A.arg);
    
    
    Hoge3 h3 = Hoge3.$b2;
    //出力してみる
    System.out.println(Hoge3.$b2.arg);
    //これはstaticにアクセスしろと警告
    System.out.println(h3.$b2.arg);
    
    //値を変えてみる
    h3.setArg("C");
    System.out.println(Hoge3.$b2.arg);
    //これはstaticにアクセスしろと警告
    System.out.println(h3.$b2.arg);
    System.out.println(Hoge3._A.arg);
  }
}


importにクラス名も入るのか。
同じパッケージに入れてもimportが必要なのは注意が必要かもな。
そして、変数がstaticであることが判明したわけだ。


実行結果。

_A
A
B
B
C
C
A


setした値は見事にstaticで動いている。
が、Hoge3._AとHoge3.$b2は別の・・・インスタンスとは言わないな。
まぁ別の"もの"ということだ。