0

enum 定数の作成中にエラーが発生した場合はどうなりますか? つまり、私は列挙型を持っています

 Enum statuses{
 OPEN(1, init(1)), CLOSE(2, init(2));
 private final int value;
 private final int internalValue;

 statuses(int v, int intv){
 this.value = v;
 this.internalValue = intv;
 }

  static int init(int value){
 return get a value from db and return it;

 }
 }

init メソッドにエラーが発生した場合、つまり接続が失われた場合はどうなりますか?列挙型は初期化されますか? init メソッドで発生する可能性のあるエラーを処理し、デフォルト値を返してから、init enum 定数を確認する必要がありますか?

4

2 に答える 2

3

init メソッドにエラーが発生した場合、つまり接続が失われた場合はどうなりますか?列挙型は初期化されますか?

を取得しExceptionInInitializerError、プログラムは (ほぼ確実に) 終了します。

これは、簡単なテストで自明に答えられます。

class Main
{
     enum Statuses{
         OPEN(1, init(1)), CLOSE(2, init(2));

         private final int value;
         private final int internalValue;

         private Statuses(int v, int intv){
             this.value = v;
             this.internalValue = intv;
         }

         static int init(int value){
            if (value == 2) throw new RuntimeException("this is a test");
            return value;
         }
     }

        public static void main (String[] args) throws java.lang.Exception
        {
                System.out.println(Statuses.OPEN);
        }
}

どの出力:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at Main.main(Main.java:25)
Caused by: java.lang.RuntimeException: this is a test
    at Main$Statuses.init(Main.java:18)
    at Main$Statuses.<clinit>(Main.java:7)
    ... 1 more

http://ideone.com/YQ8FTB

于 2013-05-06T20:33:20.427 に答える