0

この質問をより適切に述べる方法がわからないことを前もってお詫び申し上げます。

次のプログラムでは、NetBeansで実行するとエラーが発生します。列挙型を使用していますが、「this」キーワードを使用すると気に入らないようです。コード:

enum moreEnum{
   JOHN(10,"nice"),
   TONY(20,"cool");

   String desc;
   int myNum;

   moreEnum (int a, String desc){  
       myNum = a;
       this.desc = desc;  
   }

   public String getDesc(){
       return desc;
   }

   public static void main (String [] args){
       System.out.printf("%s \t %s \n", moreEnum.JOHN, moreEnum.JOHN.desc);
       System.out.printf("getDesc() method - %s", moreEnum.JOHN.getDesc());
   }
}

実行すると、次のエラーが発生します。

java.lang.VerifyError: Constructor must call super() or this() before return in method moreEnum.<init>(Ljava/lang/String;ILjava/lang/String;)V at offset 0
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
    at java.lang.Class.getMethod0(Class.java:2685)
    at java.lang.Class.getMethod(Class.java:1620)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:488)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)
        Exception in thread "main" Java Result: 1

行の位置を変更した場合:this.desc = desc; myNum=aの真上に; 、その後は正常に実行されます。this.desc=desc;を置くと 移動した場所に戻ると(プログラムを最初に実行したときと同じようにエラーが発生します)、エラーは発生しなくなります。次に、「desc」変数を他の変数に変更すると、エラーが再度発生します。「this」行の配置を切り替え、エラーなしで実行し、元に戻してから元に戻すことで、エラーを解決できます。うまく動作します。

私の質問は本当に「何が起こっているの?!」だと思います。これは列挙型の問題ですか?'この問題?またはNetBeansの問題ですか?

4

1 に答える 1

1

Netbeansのキャッシュの問題である可能性がありますか?残念ながら、これをEclipse(JDK 1.7)で再現することはできません。コンパイル/実行する前にプロジェクトをクリーンアップしてみてください。

于 2012-06-25T18:55:10.333 に答える