※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

4. 型と値と変数

4.1. 型と変数の種類

4.2. プリミティブ型と値

4.3. 参照型と値

4.4. 型変数

4.5. 引数付き型

4.5.1. 型実引数とワイルドカード

4.5.2. 引数付き型のメソッドとコンストラクター

型引数A 1 ,...,A n を伴うジェネリッククラスやインタフェース宣言をCとします。C<T 1 ,...,T n >はCの呼び出しであるとし、1≦i≦nに対しT i は(むしろワイルドカードではない)型だとします。すると:
  • mをC内のメンバーもしくはコンストラクター宣言(8.2.8.8.6.)とし、その宣言された型をTとすると、
  C<T 1 ,...,T n >内のmの型はT[A 1 :=T 1 ,...,A n :=T n ]です。
  • mをD内のメンバーもしくはコンストラクター宣言とします。ここで、DはCを拡張した型もしくはCを実装したインタフェースです。D<U 1 ,...,U k >をDと対応するC<T 1 ,...,T n >のスーパータイプとすると、
  C<T 1 ,...,T n >内のmの型はD<U 1 ,...,U k >内のmの型です。

Cの呼び出しにおける型実引数のいずれかがワイルドカードならば、:
  • C<T 1 ,...,T n >内のフィールドやメソッドやコンストラクターの型は、C<T 1 ,...,T n >の捕捉変換内のフィールドやメソッドやコンストラクターの型です。
  • DをC内のクラスやインタフェース宣言(ジェネリックでも構わない)とします。Dがジェネリックであれば、C<T 1 ,...,T n >内のDの型はDであり、全ての型実引数は非制限ワイルドカードです。

これは重要ではありません。引数付き型のメンバーに捕捉変換なしでアクセスするのは不可能であるためであり、クラスインスタンス作成式の中でnewキーワードの後にワイルドカード型は使えないためです。

前文の唯一の例外は入れ子になった引数付き型がinstanceof演算子の中の式として使われる場合です。この時、捕捉変換は適用されません。

4.6. 型の抹消

4.7. 具象可能型

4.8. 未加工型

4.9. 交差型

4.10. サブタイプ化

4.11. 型の使用箇所

4.12. 変数