ラップクラスは、対応するプリミティブ型(基本型)の値をオブジェクトにラップします。例えば、Integerクラスはint型の値をラップし、Integerクラスのオブジェクトにはint型の単一フィールドが含まれます。ラップクラスは、型を変換する各種のメソッドや、その型の値を処理するときに便利なメソッドを提供してくれます。
まず、int型の値をIntegerオブジェクトにラップすることで利用できる、Integerクラスの提供する機能の活用例を示しましょう。
下記は、int型の値をオブジェクトと比較可能なら比較し、でなければ比較不可と返すメソッドです。IntegerクラスのcompareToメソッドを使っています。compareToメソッドは、オブジェクトが Integer の場合は大小比較を行い、そうでない場合は、ClassCastException がスローされます。
オブジェクトにのみ可能なメリット
Javaはオブジェクト指向言語であり、データ処理の基本もオブジェクトを対象としています。しかし、int型のようなプリミティブ型はオブジェクトではないので、VectorやArrayListのようなコレクションには格納できないなど、活用の幅が限られてしまいます。
また、メソッドのパラメータにプリミティブ型を用いると値渡しになりますので、オブジェクトのように参照渡しができず、値のコピーが行われるため、効率が低くなります。これらを解決するのも、Integerのようなラップクラスです。
ラップクラス活用の一例として「float型の値を与えると、その値の小数点以下が0であればint型の整数として表示し、そうでなければfloat型の実数として表示する」プログラムを作成しました。int型とfloat型の戻り値を同時に持つメソッドはできませんし、2つのメソッドにしてオーバロードしようにも、どちらも同じfloat型の引数ですから、うまくいきません。そこで、Integerクラスと、Floatクラスを使い、双方を扱えるObjectクラスを戻り値とする1つのメソッドにしたのが下図のプログラムです。
このように、Integerのようなラップクラスを活用することによって、オブジェクトにのみ可能なメリットが得られるわけです。
Copyright © ITmedia, Inc. All Rights Reserved.