読書会(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冊寄贈いただきました。次回
書記の方に贈呈いたします。
[ 戻る ]