読書会(Java 2 Standard Edition 5.0 Tiger)第3回議事録

[ 戻る ]


「Java 2 Standard Edition 5.0 Tiger」を読む会 第3回議事録

日時:2005年11月19日(土) 10:00〜17:00
場所:高津市民館 第6会議室
参加者(敬称略, 朗読者*、書記**):
       根本、高橋(智)、和田、吉本*、村山、村上、岩室*、遠藤、岡沢、
       柴田、江本、門脇、小棚木、高橋(徹)**

■第7章 アノテーション
□7.1.3 @SuppressWarningsアノテーション

脚注4ではJ2SE 5.0 Update2ではサポートされていないとあるが、Tigerでもい
ずれサポートされるという話がある。現時点でUpdate5がリリースされている。
        [宿題] Update 5で対応しているか調べる

[脱線]LinuxのJDK、SMP機上では不安定かも

□7.2 アノテーション型宣言

脚注5で、'@'と'interface'の間に空白を入れられる
        [補足]Perlでも、'$'と変数名の間に空白を入れられる
        [補足]++演算子も間に空白入れられる

[質問]バイトコード構造体はアノテーション導入によって変更されたか?
        →VMの仕様としては追加されたattributeは読み飛ばさねばならない
        [宿題]仮想マシン仕様の違いの有無を調べる
        [宿題]バイトコード構造体の違いの有無を調べる

□7.2.7 デフォルト値の指定

[質問]@RequestForEnhancementのdefaultを削除して、
RequestForEnhancement.classだけを再コンパイルして配布(置き換え)すると
どうなるか?
        → 利用側にはインライン展開されないので、何らかのエラーが
        出るのではないか?
        [宿題]何が発生するか調べよう

□7.4.1 標準メタアノテーション

[質問]package-info.javaはコンパイルされクラスになるのか
        [宿題]package-info.javaの謎を解明すべし

□7.4.2 @Retentionアノテーション

[質問]@Retentionjを省略したときにデフォルトでRetentionPolicy.CLASSが指
定されたと見なす仕様はどこで定義されているか?
        [宿題]調べる

□8.1.3 複数要素アノテーションの読み取り

[質問] rfe = m.getAnnotation(RequestForEnhancement.class)でキャストな
しに代入しているが不要なのか?
        → p.102の宣言でジェネリクスとなっているのが分かる。このよ
        うに、TigerのAPI設計では引数にFoo.class(クラスオプジェクト)を
        取るものが多用されている。特にGet系メソッドにおいて1つのメソッ
        ドで複数の型を返すことができる。(トークン)

□8.2 アノテーション処理ツール(apt)

[質問]ソースファイルが生成されるとあるが、テンポラリなものか?
        →永続的に作られる

□8.2.2 ファクトリーの作成

[質問]supportedAnnotationsフィールドがfinalでunmodifiableCollectionに
なっているのはなぜ?
        →イミ的なもの(不変)

[補足]Java SE 6(Mustang)ではアノテーションで以下の変更がある
   ・javacコマンドでaptの処理ができるようになった
   ・ファクトリを作らずプロセッサだけでよい
     envはprocessメソッドの引数で渡すようになった
   ・supportAnnotationsフィールドは@SupportedAnnotationTypeで記述可能
以下URL参照
http://blogs.sun.com/roller/page/darcy?entry=jsr_269_in_mustang_build

□9.1.2 予約語

[質問]nullは予約語にないが?
        →リテラルです。trueやfalseも予約語ではなくリテラル。

□9.1.3 浮動小数点リテラル

[補足]0x1.4p0の表記は、C99に合わせたもの

[質問]C99対応コンパイラってあるの?
        → GCCでは対応。8割程度の適合性という話あり。

□9.2.1 例外連鎖

[補足]JDK1.3までなら自分で定義した例外クラスに保持する。既存の例外につ
いては手を入れられなかった。

□9.3 アサーション

[補足]JDK 1.4ではデフォルトではassert予約語が無効なので、-source 1.4を
コンパイルオプションに指定する必要があった。JDK 5.0ではデフォルトで5が
指定されているのでassertは有効。

□9.4.4 Stringクラス

[質問]contentEquals(StringBuffer sb)、contentEquals(CharSequence cs)と

出しされているのはなぜ?
        →実装では、sbをsynchronizeしてから(CharSequence)にキャストし
        てcontentEqualsを呼び出している。
        →StringBufferの場合はシステム側で同期を保証するが、それ以外は
        アプリケーション側で同期を保証するということではないか?

[質問]部分文字列を取り出すとき、中途半端な位置を指定すると下位代理
や上位代理が分れて不完全な文字列が返ってくるのか?
        →現状おそらくそうである
        →将来なんらかのインジェクションやXSS等のセキュリティ脆弱性の
        原因になるのではないだろうか?

★連絡事項
次回は、p.131の9.6 メモリモデルから。
著者の柴田さんより、Joshuaのサイン入リ本を1冊寄贈いただきました。次回
書記の方に贈呈いたします。

[ 戻る ]