JudeのJavaソースコードの読み込み機能にて。
以下のようなふたつのアノテーションとそれを利用したクラスがあった場合。
- MyAnnotation1.java
package com.shin1ogawa; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface MyAnnotation1 { String value(); }- MyAnnotation2.java
package com.shin1ogawa; public @interface MyAnnotation2 { MyAnnotation1 value() default @MyAnnotation1("string"); }- MyClass.java
package com.shin1ogawa; public class MyClass { @MyAnnotation2 String field; @MyAnnotation2(@MyAnnotation1("aaa")) String field2; }
Parsing: /Users/shin1/Documents/workspace.shin1/judeTest/src/com/shin1ogawa/MyAnnotation2.java
Failed to parse.m: Encountered "@" at line 4, column 39.
Was expecting one of:
"abstract" ...
"break" ...
"catch" ...
"do" ...
"enum" ...
"final" ...
"import" ...
"int" ...
"long" ...
"native" ...
"public" ...
"short" ...
"switch" ...
"throws" ...
"true" ...
"while" ...
...
...
...
...
...
"..." ...
"@" ...
"<=" ...
">=" ...
"!=" ...
"||" ...
Failed. どうやら「MyAnnotation1 value() default @MyAnnotation1("string");」でひっかかっている模様。このパラメータのdefaultを設定しないようにすると問題なく解析してくれる。アノテーションのパラメータにアノテーションの型を使用し、なおかつdefault値を使用するとダメなよぅだ。
0 件のコメント:
コメントを投稿