読書会(Java言語仕様 第3版)第4回議事録

[ 戻る ]


議事録「Java言語仕様 第3版」を読む会(第4回)


出席者:高橋(智)、高橋(徹)、岩室、根元、村上、
    村山、有賀、遠藤、松永、小松、福岡、山内、石黒
読み手:高橋(智)、高橋(徹)、岩室
書記:遠藤

・7.5.2

インポートのときに
.や;の前後にスペースを入れられるか
;の前なら大丈夫、改行も大丈夫

P147の6行目、「nという名前の〜」の段落を
コードにしてみた。

コンパイル単位c
package p
import static xxx.n; // static インポート宣言 d、nはフィールド
import static yyy.*; // nも入ってくるとする
class Foo {
   ...
   n // xxx.nが参照される
} 

9行目〜
package p;
import static Hoge.n; // staticインポート宣言 d、シグネチャsはメソッド名n
import static yyy.*; // signature s, name n が入ってくるとする


[宿題] 「同じ名前とシグネチャとなる複数のメソッド」はどういう意味か?
原文「several methods with the same name and signature」
→ 以下のクラス構成で、Bar.hogeをstaticインポートした場合では?
class Foo {
  public static void hoge() { System.out.println("Foo.hoge"); }
}
class Bar extends Foo {
  public static void hoge() { System.out.println("Bar.hoge"); }
}



7.6

TypeDeclarationは、「;」だけで成立するのか。

拡張子.javとは何か?
->DOS向けでは?

7.7
ローカルかつ暫定的なパッケージ名によるパッケージの集合を、
〜自動変換する方法を提供することが望ましい
 何を言っているのか?

巨大なパッケージのツリーはどう管理すべきか?
どこかに登録する場所はないのか
基本はドメイン名。個人向けのドメイン名提供サービスなどもある。
jp.gr.java_conf.confが付く

パッケージ名は
foo.bar.555
のように部分的に数字始まりはどうだろう?
-> 多分、駄目では?

今ではパッケージ名を変えるのが簡単なので、
最初は適当なパッケージ名で始めて
公開する直前になって変えられる。

パッケージ名が原因でメンテナンスできなくなるより
スパゲッティプログラムが原因になることが多い

8.

finalメソッドは隠蔽できないとはどういう意味か
static finalでは?

インスタンス初期化子とはなにか?
class Foo {
 {
  // これ
 }
}

p154の2行目、スーパーインタフェースとはどういう意味か?
そのメソッドをオーバーライドするとは?

8.1

8.1.1

アノテーションはpublicなどの後にも書けるらしい。
(慣習には反する)

8.1.1.1
p156の下から6行目の変数Pointは誤植?
原文では、「a Point variable」
訳としてあまりよろしくないのでは?
「Point型の変数」か「Point変数」あたりでは。
→ 訳者に報告

8.1.2
p159のコードがよく分からない
[宿題] 各自実行してみて、結果・感想をMLに報告する。
[宿題] 関数型言語で、いかにシンプルになるか実装する。

8.1.3

「字句的に見てn番目」の意味が良く分からない。
→番号の数え方は、内側から外側だろう

8.1.4
循環宣言されたクラスのロードでClassCircularityErorrが発生するとあるが
そのようなことは起こるのか?
→ 別々のところでコンパイルされたクラスファイルをまぜれば起こる

8.1.5
C#ではインタフェースの多重継承でシグナチャがぶつかる場合でも
呼ぶ側、呼ばれる側が区別できるようになっている。

;はメンバ宣言の一種である。
forやifのインデントレベルを表現するのに
;を縦につなげることが可能

8.2
継承されるメンバ、デフォルトの可視性だったらどうなる?
→ パッケージをまたがるかどうかで決まる

publicクラスの親クラスが、package privateクラスにするのは
C++のprivate継承に少し似ている。
→ C++のprivate継承とは何か
→ 継承はしているが、継承していることを外に見せない継承。

8.3
VariableDeclaratorIdが、再帰定義になっているのはなぜ?
→ []を複数回繰り返して、多次元配列を宣言するため

[宿題] p174の最後から5行目、「例えば双方のクラスが〜」の例を2つほど

8.3.1
参照変数.スタティックフィードのようなアクセスができるのはなぜか

8.3.2
P181の int k = j = j + 1 はエラー。誤植情報が上がっている。

InstanceInitializerを使うことはあるか?
→ 無名インタークラスでコンストラクタの代わりに。

8.3.3

int mt()[] のように書くと、intの配列を返せる。
互換性のためなので、使うべきでない。

P188のLastFormalParameterの定義で、
Type...optとあるが、optは不要では?
あるいは
Type ...optとして、FormalParameterを削除
でも良さそう。

次回はP189 「8.4.2 メソッドのシグネチャ」から


[ 戻る ]