「4.5.2. 引数付き型のメソッドとコンストラクター」の編集履歴(バックアップ)一覧はこちら
「4.5.2. 引数付き型のメソッドとコンストラクター」(2012/09/10 (月) 17:27:22) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*[[4. 型と値と変数]]
**[[4.1. 型と変数の種類]]
**[[4.2. プリミティブ型と値]]
**[[4.3. 参照型と値]]
**[[4.4. 型変数]]
**[[4.5. 引数付き型]]
***[[4.5.1. 型実引数とワイルドカード]]
***4.5.2. 引数付き型のメソッドとコンストラクター
型引数A&sub(){1},...,A&sub(){n}を伴うジェネリッククラスやインタフェース宣言をCとします。C<T&sub(){1},...,T&sub(){n}>はCの呼び出しであるとし、1≦i≦nに対しT&sub(){i}は(むしろワイルドカードではない)型だとします。すると:
-mをC内のメンバーもしくはコンストラクター宣言([[8.2.>8.2. クラスメンバー]]、[[8.8.6.>8.8.6. コンストラクターの型]])とし、その宣言された型をTとすると、
C<T&sub(){1},...,T&sub(){n}>内のmの型はT[A&sub(){1}:=T&sub(){1},...,A&sub(){n}:=T&sub(){n}]です。
-mをD内のメンバーもしくはコンストラクター宣言とします。ここで、DはCを拡張した型もしくはCを実装したインタフェースです。D<U&sub(){1},...,U&sub(){k}>をDと対応するC<T&sub(){1},...,T&sub(){n}>のスーパータイプとすると、
C<T&sub(){1},...,T&sub(){n}>内のmの型はD<U&sub(){1},...,U&sub(){k}>内のmの型です。
Cの呼び出しにおける型実引数のいずれかがワイルドカードならば、:
-C<T&sub(){1},...,T&sub(){n}>内のフィールドやメソッドやコンストラクターの型は、C<T&sub(){1},...,T&sub(){n}>の[[捕捉変換>5.1.10. 捕捉変換]]内のフィールドやメソッドやコンストラクターの型です。
-DをC内のクラスやインタフェース宣言(ジェネリックでも構わない)とします。Dがジェネリックであれば、C<T&sub(){1},...,T&sub(){n}>内のDの型はDであり、全ての型実引数は非制限ワイルドカードです。
&i(){&small(){これは重要ではありません。引数付き型のメンバーに[[捕捉変換>5.1.10. 捕捉変換]]なしでアクセスするのは不可能であるためであり、クラスインスタンス作成式の中で&tt(){new}キーワードの後にワイルドカード型は使えないためです。}}
&i(){&small(){前文の唯一の例外は入れ子になった引数付き型が[[instanceof演算子>15.20.2. 型比較演算子instanceof]]の中の式として使われる場合です。この時、捕捉変換は適用されません。}}
**[[4.6. 型の抹消]]
**[[4.7. 具象可能型]]
**[[4.8. 未加工型]]
**[[4.9. 交差型]]
**[[4.10. 型の派生]]
**[[4.11. 型の使用箇所]]
**[[4.12. 変数]]
*[[4. 型と値と変数]]
**[[4.1. 型と変数の種類]]
**[[4.2. プリミティブ型と値]]
**[[4.3. 参照型と値]]
**[[4.4. 型変数]]
**[[4.5. 引数付き型]]
***[[4.5.1. 型実引数とワイルドカード]]
***4.5.2. 引数付き型のメソッドとコンストラクター
型引数A&sub(){1},...,A&sub(){n}を伴うジェネリッククラスやインタフェース宣言をCとします。C<T&sub(){1},...,T&sub(){n}>はCの呼び出しであるとし、1≦i≦nに対しT&sub(){i}は(むしろワイルドカードではない)型だとします。すると:
-mをC内のメンバーもしくはコンストラクター宣言([[8.2.>8.2. クラスメンバー]]、[[8.8.6.>8.8.6. コンストラクターの型]])とし、その宣言された型をTとすると、
C<T&sub(){1},...,T&sub(){n}>内のmの型はT[A&sub(){1}:=T&sub(){1},...,A&sub(){n}:=T&sub(){n}]です。
-mをD内のメンバーもしくはコンストラクター宣言とします。ここで、DはCを拡張した型もしくはCを実装したインタフェースです。D<U&sub(){1},...,U&sub(){k}>をDと対応するC<T&sub(){1},...,T&sub(){n}>のスーパータイプとすると、
C<T&sub(){1},...,T&sub(){n}>内のmの型はD<U&sub(){1},...,U&sub(){k}>内のmの型です。
Cの呼び出しにおける型実引数のいずれかがワイルドカードならば、:
-C<T&sub(){1},...,T&sub(){n}>内のフィールドやメソッドやコンストラクターの型は、C<T&sub(){1},...,T&sub(){n}>の[[捕捉変換>5.1.10. 捕捉変換]]内のフィールドやメソッドやコンストラクターの型です。
-DをC内のクラスやインタフェース宣言(ジェネリックでも構わない)とします。Dがジェネリックであれば、C<T&sub(){1},...,T&sub(){n}>内のDの型はDであり、全ての型実引数は非制限ワイルドカードです。
&i(){&small(){これは重要ではありません。引数付き型のメンバーに[[捕捉変換>5.1.10. 捕捉変換]]なしでアクセスするのは不可能であるためであり、クラスインスタンス作成式の中で&tt(){new}キーワードの後にワイルドカード型は使えないためです。}}
&i(){&small(){前文の唯一の例外は入れ子になった引数付き型が[[instanceof演算子>15.20.2. 型比較演算子instanceof]]の中の式として使われる場合です。この時、捕捉変換は適用されません。}}
**[[4.6. 型の抹消]]
**[[4.7. 具象可能型]]
**[[4.8. 未加工型]]
**[[4.9. 交差型]]
**[[4.10. サブタイプ化]]
**[[4.11. 型の使用箇所]]
**[[4.12. 変数]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: