javacがパブリック列挙型の静的ネストされたクラスのアノテーションを認識しないjavacコンパイルのエラーが発生しました。静的なネストされたクラスからenumを移動すると、コンパイルエラーは解決されました。誰もjavacが失敗した理由を知っていますか?これはJavaコンパイラのバグですか?それとも私が気づいていないJavaのニュアンスがありますか?パブリック列挙型の静的ネストされたクラスのアノテーションをコンパイルできません
以下はスタンドアロンのテストケースです。
をコンパイルに失敗:
package test;
import test.AnnotationBug.NestedClassWithEnum.ParticipantType;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.googlecode.objectify.annotation.Embed;
public class AnnotationBug {
ParticipantType type;
@Embed
@Data
@NoArgsConstructor
public static final class NestedClassNoEnum {
}
@Embed
@Data
@NoArgsConstructor
public static final class NestedClassWithEnum {
ParticipantType type;
public enum ParticipantType {
ORGANIZER,
REGISTERED,
WAIT_LISTED
}
}
}
コンパイル出力:
$ javac -classpath /home/avaliani/projects/jars/objectify-4.0b2.jar:/home/avaliani/projects/jars/lombok.jar test/AnnotationBug.java
test/AnnotationBug.java:20: error: cannot find symbol
@Embed
^
symbol: class Embed
location: class AnnotationBug
test/AnnotationBug.java:21: error: cannot find symbol
@Data
^
symbol: class Data
location: class AnnotationBug
test/AnnotationBug.java:22: error: cannot find symbol
@NoArgsConstructor
^
symbol: class NoArgsConstructor
location: class AnnotationBug
コンパイル:
package test;
// import test.AnnotationBug.NestedClassWithEnum.ParticipantType;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.googlecode.objectify.annotation.Embed;
public class AnnotationBug {
ParticipantType type;
@Embed
@Data
@NoArgsConstructor
public static final class NestedClassNoEnum {
}
@Embed
@Data
@NoArgsConstructor
public static final class NestedClassWithEnum {
ParticipantType type;
}
public enum ParticipantType {
ORGANIZER,
REGISTERED,
WAIT_LISTED
}
}
は、エラーなしでコンパイル:
$ javac -classpath /home/avaliani/projects/jars/objectify-4.0b2.jar:/home/avaliani/projects/jars/lombok.jar test/AnnotationBug.java
指摘観光:
1)コンパイルの失敗の行番号をメモします。 NestedClassNoEnumの注釈の解析に問題はありません。
2)Javaバージョン:
$ java -version
java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-0ubuntu0.12.10.1)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
注釈の1つまたはいくつか/すべてを削除して、それらのいずれかに分離できるかどうか確認しましたか?たとえば、リンクされたコードに '@ Embed'と' @ NoArgsConstructor'を唯一使用しているようです。はるかに小さく、よりシンプルなクラスで再現できますか? – ajp15243
こんにちは@ ajp15243。あなたのメモに感謝します。私はテストケースをスタンドアローンのテストケースに変更しました。 Embedアノテーションを削除しようとしましたが、コンパイラはNoArgsConstructorとDataアノテーションをコンパイルできませんでした。だから、問題はアノテーションではないと確信しています。 – Amir
@Amir確かに、私の間違い - あなたの最初の例を再現し、あなたが参照しているライブラリのアノテーションのコードをコピーし、oracle jdk 7u10でうまくコンパイルしました。バグのように見えます。 – assylias