列挙型その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は別の・・・インスタンスとは言わないな。
まぁ別の"もの"ということだ。