読書会(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ですので、次のようにキャストしたとし
    ます。
    Class runnableCl = (Class)cl; 」
    --> そもそも Class の '?' は必要なのか?
        Class で足りるのでは?
        --> Runnableクラスclassになるのでダメ?
        --> Runnableクラス自体のインスタンスを作れないからでは?
            ( x.newInstance(); の呼び出しができない )
            --> 何が起きるのか? 抽象クラスclassでは?
                --> InstantiationException が発生する!!

  以下の2つのキャスト方法の、実行時のコードの違いは?
  Class runnableCl = (Class)cl;
  Class 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アノテーション から

[ 戻る ]