2

JLS (パラメータ化された型) のセクション 4.5 には、次の表記法が記載されています S[F1:=T1,...,Fn:=Tn]

この表記の意味がよくわかりません。

それは次の段落で言及されています。

ジェネリック型には、対応する境界 B1、...、Bn を持つ型パラメーター F1、...、Fn があります。パラメーター化された型の各型引数 Ti は、対応する境界にリストされているすべての型のサブタイプであるすべての型に及びます。つまり、Bi のバインドされた型 S ごとに、Ti は S[F1:=T1,...,Fn:=Tn] のサブタイプです (§4.10)。

上記の言葉の意味は明らかです。

[F1:=T1,...,Fn:=Tn]しかし、なぜ私たちが後に持っているのかは私には明らかではありませんS

4

2 に答える 2

0

それは私には間違っているように見えます。

まず、角かっこで囲まれた部分がなければ、この文は前のステートメントを正しく言い換えたものであり、どちらも私の Java 言語の理解と一致しています。

2つ目:表記が間違っています。§4.10 はサブタイプとスーパータイプの記法 <: と :> を参照していますが、実際に使用されているのは置換記法 := です (実際にはバージョン 8 では置換記法として定義されていませんでしたが、バージョン 7 では定義されていました。資料)。

最後に: 以前のバージョンの JSL には、同じ表記のさらに無意味なバージョンがありました。

4.5. パラメータ化された型

対応する境界 B1,...,Bn を持つ 1 つ以上の型パラメーター A1,...,An を持つジェネリック クラスまたはインターフェイス宣言 C (§8.1.2、§9.1.2) は、パラメーター化された型のセットを定義します。型パラメーター セクションの可能な呼び出しごとに。

セット内の各パラメーター化された型は C の形式であり、各型引数 Ti は、対応する境界にリストされているすべての型のサブタイプであるすべての型に及びます。つまり、Bi の束縛型 Si ごとに、Ti は Si[F1:=T1,...,Fn:=Tn] のサブタイプです。

同じブラケットがありますが、今回はブラケットで使用される前に F が何であるかについても言及していません。

このセクションがバージョン 6 と 7 の間で書き直されたときに、ブラケットが間違ってコピーされたようです。バージョン 6 にはブラケットがありますが、単純に各型パラメーターに対して境界チェックが行われることを意味します。

于 2015-11-08T05:25:49.750 に答える