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

4. 型と値と変数

4.1. 型と変数の種類

4.2. プリミティブ型と値

4.3. 参照型と値

4.4. 型変数

4.5. 引数付き型

4.6. 型の抹消

4.7. 具象可能型

4.8. 未加工型

4.9. 交差型

4.10. サブタイプ化

4.11. 型の使用箇所

宣言や特定の式内において型は使用されます。

例4.11-1. 型の使用

import java.util.Random;
import java.util.Collection;
import java.util.ArrayList;

class MiscMath<T extends Number> {
    int divisor;
    MiscMath(int divisor) { this.divisor = divisor; }
    float ratio(long l) {
        try {
            l /= divisor;
        } catch (Exception e) {
            if (e instanceof ArithmeticException)
                l = Long.MAX_VALUE;
            else
                l = 0;
        }
        return (float)l;
    }
    double gausser() {
        Random r = new Random();
        double[] val = new double[2];
        val[0] = r.nextGaussian();
        val[1] = r.nextGaussian();
        return (val[0] + val[1]) / 2;
    }
    Collection<Number> fromArray(Number[] na) {
        Collection<Number> cn = new ArrayList<Number>();
        for (Number n : na) cn.add(n);
        return cn;
    }
    <S> void loop(S s) { this.<S>loop(s); }  
}

この例では型は以下の宣言内で使用されています。:
  • インポートされた型、ここでは型Randomが、パッケージakios.util.Randomよりインポートされて宣言されています。
  • フィールド(とはクラス変数やクラスのインスタンス変数(8.3.)やインタフェースの定数(9.3.))、ここではクラス型MiscMathのフィールドdivisorint型であると宣言されています。
  • メソッド引数、ここではメソッドratioの引数llong型であると宣言されています。
  • メソッド戻り値、ここではメソッドratioの戻り値がfloat型であると宣言されています。さらに、メソッドgausserの戻り値がdoubleであると宣言されています。
  • コンストラクター引数、ここではMiscMathのコンストラクター引数がint型であると宣言されています。
  • 局所変数(14.4.14.14.)、ここではメソッドgausserのローカル変数rvalがそれぞれRandom型、double[]型(doubleの配列)であると宣言されています。
  • 例外引数、ここではcatch節の例外引数eException型であると宣言されています。
  • 型引数、ここではMiscMathの型引数がNumber型を制限とした型変数Tが宣言されています。
  • 引数付き型を使用する宣言内、ここではNumber型が引数付き型Collection<number>の型実引数として使用されています。

さらに以下の種類の式で型が使用されています。:
  • クラスインスタンス作成、ここではメソッドgausserのローカル変数rRandom型を使用するクラスインスタンス作成式によって初期化されています。
  • ジェネリッククラスクラスインスタンス作成、ここではNumbernew ArrayList<Number>()式の型実引数として使われています。
  • 配列作成、ここではメソッドgausserのローカル変数valが2個のdoubleの配列を作成する配列作成式によって初期化されています。
  • ジェネリックメソッドコンストラクター、ここではメソッドloopが明示的型実引数Sを伴って呼び出されています。
  • キャスト、ここではメソッドratioreturn文でfloat型へのキャストが使われています。
  • instanceof演算子、ここではinstanceof演算子によってeArithmeticException型と代入互換(assignment-compatible)であるか判定しています。

4.12. 変数