[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12155] Re: (議事録)J2SE 5.0 Tiger 第3回 ( Annotation のデフォルト値)
高橋(智)です。
"TAKAHASHI,Toru" wrote:
snip
> □7.2.7 デフォルト値の指定
>
> [質問]@RequestForEnhancementのdefaultを削除して、
> RequestForEnhancement.classだけを再コンパイルして配布(置き換え)すると
> どうなるか?
> → 利用側にはインライン展開されないので、何らかのエラーが
> 出るのではないか?
> [宿題]何が発生するか調べよう
以下のような手順で、defaultを削除して再コンパイルした状態で、Annotationに
アクセスしてみました。
問題のAnnotationで修飾されたクラスは、フツーにロードできたのですが、testの
値を読み出す際に java.lang.annotation.IncompleteAnnotationException という
例外が送出されました。
やはり、いったん default を定義したら、default を止めるのは避けたほうが良い
と思われます。
あと、例外のスタックトレースに出てくる
at $Proxy3.test(Unknown Source)
の $Proxy3 は、何なのでしょうか?
========================================================================
ken@imacg5 src>java -version
java version "1.5.0_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_05-83)
Java HotSpot(TM) Client VM (build 1.5.0_05-48, mixed mode, sharing)
ken@imacg5 src>cat untitled1/MyAnno.java
package untitled1;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnno {
String test() default "testdefault";
}
ken@imacg5 src>cat untitled1/Untitled1.java
package untitled1;
@MyAnno()
public class Untitled1 {
public static void main(String[] args) {
if(args[0].equals("test1")) {
System.out.println(Untitled1.class.getName());
}
else if(args[0].equals("test2")) {
MyAnno anno = Untitled1.class.getAnnotation(MyAnno.class);
System.out.println(anno.test());
}
}
}
ken@imacg5 src>javac untitled1/*.java
ken@imacg5 src>java untitled1.Untitled1 test1
untitled1.Untitled1
ken@imacg5 src>java untitled1.Untitled1 test2
testdefault
ken@imacg5 src>cat untitled1/MyAnno.java
package untitled1;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnno {
//String test() default "testdefault";
String test();
}
ken@imacg5 src>javac untitled1/MyAnno.java
ken@imacg5 src>java untitled1.Untitled1 test1
untitled1.Untitled1
ken@imacg5 src>java untitled1.Untitled1 test2
Exception in thread "main" java.lang.annotation.IncompleteAnnotationException: untitled1.MyAnno missing element test
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:53)
at $Proxy3.test(Unknown Source)
at untitled1.Untitled1.main(Untitled1.java:10)
========================================================================
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )