読書会(Java 2 Standard Edition 5.0 Tiger)第2回議事録
[ 戻る ]
Java 2 Standard Edition 5.0 Tiger 第2回議事録
日時:2005/10/15 10:00-17:00
場所:てくのかわさき 第5研修室
参加者:高橋(徹)さん、小棚木さん、村山さん、和田さん、村上さん、
秋元さん、金井さん、岡澤さん、吉本さん、奥さん、岩室さん、
高橋(智)、塩澤さん、遠藤さん、門脇さん、根本さん
朗読者:吉本さん、奥さん、岩室さん
書記:高橋(智)
■ 1.8.2 asSubclassメソッド
「本来なら、Class extends Runnable>ですので、次のようにキャストしたとし
ます。
Class extends Runnable> runnableCl = (Class extends Runnable>)cl; 」
--> そもそも Class extends Runnable> の '?' は必要なのか?
Class で足りるのでは?
--> Runnableクラスclassになるのでダメ?
--> Runnableクラス自体のインスタンスを作れないからでは?
( x.newInstance(); の呼び出しができない )
--> 何が起きるのか? 抽象クラスclassでは?
--> InstantiationException が発生する!!
以下の2つのキャスト方法の、実行時のコードの違いは?
Class extends Runnable> runnableCl = (Class extends Runnable>)cl;
Class extends Runnable> runnableCl = cl.asSubclass(Runnable.class);
--> Jadで逆コンパイルすれば分かるのでは?
--> 実行時のキャストの例外は、どちらも発生する可能性アリ
--> unchecked warning が出るか、出ないか、の違いしかない
--> Suppress Warnings ができないのは辛い
--> asSubclassメソッドの実装コードを確認しよう!!
--> instanceof ではない別のメソッドで前判断を行っているようだ
そもそもジェネリックスの本質は、キャストするコードを書かなくても良いこと
--> キャストを書いて実行時例外が出ることを減らしたい
■ 1.9.2 空コレクション
そもそも Collections.emptyList(); メソッドのシグネチャはどうなっている?
--> APIリファレンスを確認する
--> ジェネリックメソッドになっている
「 public static final List emptyList() {...} 」
--> List list = Collections.emptyList(); の記述を、戻り値を捨
てるような Collections.emptyList(); のみの記述ではコンパイルできる
のか?
--> できる!! (キャストが不要なだけ)
--> C++言語のテンプレートメソッドではどうか? --> 宿題!!
C#.NET 2.0 の Generics ではどのような仕様になっているのか??
■ 1.11 ジェネリックスのまとめ
「... API設計者には、深い洞察を必要とする高い能力を要求することになります。」
とあるが...
--> ジェネリックスを採用したサードパーティ製のライブラリは存在するのか?
--> オープンソースなどのライブラリでリリースされているものを使った事が
有りますか?
--> Jakarta Commons のロギングのライブラリは、ジェネリックスではないも
のの、アノテーションを採用していたかも?
■ 第2章 ボクシング/アンボクシング
「ボクシング(boxing)」と「アンボクシング(unboxing)」の日本語の訳語は?
--> これだけカタカナにせざるを得ない? 案として、以下はどうか?
--> 梱包, 開梱
--> 箱化, 非箱化
--> 箱化, 逆箱化
--> 箱入り, 箱出し
--> 英語では、box も unbox も他動詞として使える
--> 中国語ではどう記述されているのか? --> 宿題!!
■ 2.2 ボクシング変換
「 Object o = 1;
o *= 3; 」
はコンパイルできるのか? --> コンパイルエラー
「 Integer o = 1;
o *= 3; 」
はコンパイルできるのか? --> コンパイル可能
「 Short s = 1;
Integer i = s; 」
はコンパイルできるのか? --> コンパイルエラー
「 short s = 1;
Integer i = s; 」
はコンパイルできるのか? --> 本では、コンパイル可能だと解説されているが...
--> コンパイルエラーになる!!
--> 本の誤植なのか?
--> 言語仕様はコンパイルエラー
--> 出典は? (情報求む!!)
■ 2.4.1 オーバーロードされたメソッドの呼び出し
呼び出されるオーバーロードメソッドの解決順が分かりづらい
--> そもそもオーバーロード自体不要なのでは?
--> コンストラクタでは必要なので、不要にはできない
■ 2.5 演算子との関係
「 final Integer x = 1;
x++; 」
はコンパイルできるのか? --> 「代入できない」旨のコンパイルエラー
「 >>> 」の演算子の機能は? --> 宿題!! (情報求む)
「 >>> 」の演算子の読み方は? --> 宿題!! (情報求む)
■ 第3章 拡張されたfor文
拡張for文「 for ( FormalParameter : Expression ) Statement 」のExpressionが
nullだったら何が起きる?
--> NullPointerExceptionが発生する?
--> 発生する
--> 拡張for文のコンパイル結果(コンパイラが生成するコード)は言語仕様で決ま
っているのか?
--> 宿題!!
--> Iterableのオブジェクト と 配列[] の2種類がある
for ではなく foreach のほうが良いのでは?
--> 予約語はできるだけ増やしたくなかった?
■ 3.1.1 注意事項
拡張for文には、ループ内で参照できるカウンタ変数はないのか?
--> #i は使えないのか?
--> Jadで逆コンパイルすれば何か見つかるかも?
--> やっぱり従来のfor文のほうが便利かも?
■ 第4章 enum型
そもそも enum の発音は?
--> イーナム
--> エナム
--> イニューム
■ 4.1 単純なenum型
enumの定数の最後にカンマ , を書くことが出来る意義は?
--> 文末の処理が色々と楽になる
Suitクラスのコンストラクタはどのように生成されているのか?
--> javapコマンドの出力結果には出ていないけど...
--> Jadコマンドで逆コンパイルしたら? --> 宿題!!
■ 4.6 enum型の制約
インナークラス内でのenum型の宣言はできないが...
--> staticなインナークラス内では可能!!
■ 5.5 メソッドのstaticインポート
そもそもなぜ著者の柴田さんは P74〜P75 に記述を大幅に追加したのか?
--> staticインポートの仕様が途中で変更されたから?
--> 単に原稿の送付ミス?
■ 第6章 可変長パラメータ
シンタックスで「 type ... variableName 」とあるが、type と ... の間に空白が
ない type... はOKなのか?
--> type ... と type... のどっちでも良い
--> どっちが良い? 本には混在して記述されているが...
■ 第7章 アノテーション
アノテーションをサポートしているUMLモデリングツールはあるのか?
--> そもそもUMLのクラス図では、アノテーションをどのように表現するのか?
--> アノテーションには引数もある
--> 複数のアノテーションを指定出来る
--> ステレオタイプの機能では足りない?
--> C#.NETの属性(Attribute)はどうなのか?
次回は、P87 の 7.1.3 @SuppressWarningsアノテーション から
[ 戻る ]