akios @ ウィキ

4.3. 参照型と値

最終更新:

akios

- view
管理者のみ編集可

4. 型と値と変数

4.1. 型と変数の種類

4.2. プリミティブ型と値

4.3. 参照型と値

参照型(reference type)には、クラス型インタフェース型型変数そして配列型の4種類があります。

ReferenceType:
  ClassOrInterfaceType
  TypeVariable
  ArrayType

ClassOrInterfaceType:
  ClassType
  InterfaceType

ClassType:
  TypeDeclSpecifier TypeArgumentsopt

InterfaceType:
  TypeDeclSpecifier TypeArgumentsopt

TypeDeclSpecifier:
  TypeName
  ClassOrInterfaceType . Identifier

TypeName:
  Identifier
  TypeName . Identifier

TypeVariable:
  Identifier

ArrayType:
  Type [ ]

コード例:

class Point { int[] metrics; }
interface Move { void move(int deltax, int deltay); }

はクラスとしてPoint型を、インタフェースとしてMove型を、そしてPointクラスのフィールドmetricsの宣言でint[]配列型(intの配列)を使用しています。}

クラスやインタフェース型は型宣言指定子(type declaration specifier)とオプションの型実引数から構成されます。もし型実引数がクラスやインタフェース型のどこかに現れるなら、その型は引数付き型です。

型宣言指定子は単一の型名もしくはクラスやインタフェース型に"."と識別子を組み合わせたものです。後者の場合、指定子はT.id形式をとりidTアクセス可能なメンバー型(8.5.9.5.)でなければなりません。そうでなければコンパイルエラーとなります。指定子はそのメンバー型を表します。

プログラミング言語Javaの文脈ではジェネリッククラスやインタフェース名に型実引数を与えることなく使うこともできます。そのような文脈では未加工型の使用を必要としません。むしろジェネリッククラスやインタフェースに対して型実引数が不必要もしくは不適切である文脈です。

単一型インポート宣言import java.util.List;は単一の型名Listをコンパイル単位のスコープの中に設定します。これによりList<...>形式の引数付き型を使用できるようになります。別の例で、ジェネリッククラスの静的メソッドの呼び出しには、その型実引数は静的メソッドには不適切なため、型実引数なしのジェネリッククラスの名前(できれば限定名)のみが必要です。(メソッド自体はジェネリックかつそれ自身の型実引数を持っていますが、スタティックメソッドの型引数はそれを囲むジェネリッククラスの型引数とは無関係に必要です(6.5.5.)。)

型実引数なしのジェネリッククラスやインタフェース名が頻繁に必要とされるため、型宣言指定子と型名は異なっています。型名は他の型名を使って常に限定されます。いくつかのケースでは、この書き方は引数付き型のメンバーである内部クラスにアクセスするために必要です。

以下は型宣言指定子が型名と異なる例です。:

class GenericOuter<T extends Number> {
    public class Inner<S extends Comparable<S>> {
        T getT() { return null;}
        S getS() { return null;}
    }
}

class Test {
    public static void main(String[] args) {
        GenericOuter<Integer>.Inner<Double> x1 = null;
        Integer i = x1.getT();
        Double d = x1.getS();
    }
}

型名を使って限定することによりInnerにアクセスするなら、以下のようになります。:

GenericOuter.Inner x2 = null;

未加工型のように扱い、型情報は失われています。

4.3.1. オブジェクト

4.3.2. Objectクラス

4.3.3. Stringクラス

4.3.4. 参照型が同じである条件

4.4. 型変数

4.5. 引数付き型

4.6. 型の抹消

4.7. 具象可能型

4.8. 未加工型

4.9. 交差型

4.10. サブタイプ化

4.11. 型の使用箇所

4.12. 変数

目安箱バナー