JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ラッパーとは

ラッパー

日本語 包む者
英語 wrapper
ふりがな らっぱー
フリガナ ラッパー

解説

他のクラス変数、システムを「覆い隠す」ために存在するクラス
 
他のクラス変数フィールドとして持ち、隠蔽し管理し操作するためのクラスを「ラッパークラス」「ラップクラス」と呼ぶ。
言語仕様的な決まりはなく、明確な定義もない。
通常ラッパークラスは、クラスもしくは変数ひとつを「包み込む対象」として選び、それをフィールドとして持つ。そのフィールドへは直接外からアクセスできないようにし、間接的にアクセスするためのメソッドを用意する。そのメソッドは「包み込む対象」を安全かつ十分に使用できるものを用意する。
このような条件に当てはまるクラスを一般的にそう呼ぶ、ということである。
 
ラッパークラスとする目的は様々である。
目的のひとつに、隠す対象のクラスが使いにくいため、使いやすいメソッドを提供するため、というものがある。引数が複雑だったり、複数のメソッドを順番に呼ぶ必要があったりする場合に、これらを使用せず簡易な方法を用意する目的で、包み込みメソッドを用意するわけである。
また、隠す対象が直接操作されるのを避けるためだったり、隠す対象が持つ機能とは別の形での機能を提供するためだったり、といったことがラッパークラスを作る目的となる。
いずれも、「使う側」と「隠す対象」の間に「ラッパークラスメソッド」を挟んでいる。このメソッドを仲介役とすることで、「隠す対象」への直接のアクセスを避けつつ、付加価値を加えている。
 
ラッパークラスの具体例のひとつに、intに対するIntegerクラスが挙げられる。
Integerクラスintのラッパークラスとして機能し、intが持たない「クラスとしての機能」を提供する。APIリファレンスには「The Integer class wraps a value of the primitive type int in an object.」と書かれており、この「wraps」が「覆い隠す」という意味になる。
 
プリミティブ型は、全てのに対応するラッパークラスが存在する。
プリミティブ型に対応するラッパークラスは、以下の通り。
 
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
 
これらのラッパークラスは「インスタンスは不変」なため、インスタンス内の値を変更することはできない。
この機能によって、ラッパークラスはよりプリミティブ型に近い扱いが可能となっている。
詳しくは「インスタンスは不変」の項目を参照
また、オートボクシングによってプリミティブ型との変換が簡単にできるようになっている。詳しくは「ボクシング変換」「アンボクシング変換」の項目を参照
 
これらはプリミティブ型にはない便利なメソッドを持ち、かつプリミティブ型が持たない「参照」を用いた処理をうことができる。
特にこれはArrayListクラス等のコレクションを使用する場合に必要となる。コレクションクラス要素Objectクラスとなっているため、プリミティブ型を格納することができない。また、ジェネリッククラスジェネリックメソッドパラメーター(「<T>」のこと)にもプリミティブ型を使用することができない。
そのため、コレクション要素プリミティブ型を使用したい場合には、その代わりに対応するラッパークラスを使用することになる。
また、ラッパークラスを使用することでプリミティブ型にはない「null」という状態を持つことができる。それにより、数値の入力を受け取る際に「入力なし」という状態を「null」で表現することができる。
 
「ラッパー」と言っても「Yo!」とか言う人達とは関係ないので注意。
意味的には「クレラップ」「サランラップ」の方が近い。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.util.ArrayList;

public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスは、int型を包み込む
        // ラッパークラスです。
        Integer integer = new Integer( 100 );
        System.out.println( integer );
        // 100

        // 今作ったインスタンス内にint型のフィールドが
        // 存在し、その中に整数値100が格納されています。
        // このフィールドには直接アクセスできません。

        // また、int型が持たない機能も提供しています。
        // たとえば、中の値を元にハッシュコードを生成する
        // hashCode()メソッドを持っています。
        System.out.println( integer.hashCode() );
        // 100

        // J2SE 5.0以降はボクシング変換・アンボクシング変換が
        // できるようになったので、プリミティブ型との相互変換が
        // 簡単になりました。

        // ボクシング変換を使ってプリミティブ型→ラッパークラス
        // の変換をします。
        integer = 200;
        System.out.println( integer );
        // 200

        // アンボクシング変換を使ってラッパークラス→プリミティブ型
        // の変換をします。
        int i = integer;
        System.out.println( i );
        // 200

        // Integerクラス等の、プリミティブ型のラッパークラスは
        // 「null」という状態を持てます。
        integer = null;
        // これを使ってたとえば「未入力」を表現できたりします。

        // また、ArrayListクラス等のコレクションは要素に
        // プリミティブ型を使用できないため、代わりに
        // ラッパークラスを使用する必要があります。
        // ※コンパイルエラーの例
        // ArrayList<int> array;
        // ※エラーメッセージ
        // トークン "int" に構文エラーがあります。
        // このトークンの後には Dimensions を指定する必要があります
        // ※コンパイルエラーの例ここまで
        // というコンパイルエラーになるので、ラッパークラスを
        // 使用します。
        ArrayList<Integer> array = new ArrayList<Integer>();
        array.add( new Integer( 100 ) );
        array.add( new Integer( 200 ) );
        array.add( new Integer( 300 ) );
        forint iF1 = 0; iF1 < array.size(); ++iF1 )
        {
            Integer e = array.get( iF1 );
            System.out.print( e + ", " );
        }
        // 100, 200, 300, 
    }
}
// Sample.java
import java.util.ArrayList;

public class Sample
{
    public static void main( String[] args )
    {
        // Integerクラスは、int型を包み込む
        // ラッパークラスです。
        Integer integer = new Integer( 100 );
        System.out.println( integer );
        // 100

        // 今作ったインスタンス内にint型のフィールドが
        // 存在し、その中に整数値100が格納されています。
        // このフィールドには直接アクセスできません。

        // また、int型が持たない機能も提供しています。
        // たとえば、中の値を元にハッシュコードを生成する
        // hashCode()メソッドを持っています。
        System.out.println( integer.hashCode() );
        // 100

        // J2SE 5.0以降はボクシング変換・アンボクシング変換が
        // できるようになったので、プリミティブ型との相互変換が
        // 簡単になりました。

        // ボクシング変換を使ってプリミティブ型→ラッパークラス
        // の変換をします。
        integer = 200;
        System.out.println( integer );
        // 200

        // アンボクシング変換を使ってラッパークラス→プリミティブ型
        // の変換をします。
        int i = integer;
        System.out.println( i );
        // 200

        // Integerクラス等の、プリミティブ型のラッパークラスは
        // 「null」という状態を持てます。
        integer = null;
        // これを使ってたとえば「未入力」を表現できたりします。

        // また、ArrayListクラス等のコレクションは要素に
        // プリミティブ型を使用できないため、代わりに
        // ラッパークラスを使用する必要があります。
        // ※コンパイルエラーの例
        // ArrayList<int> array;
        // ※エラーメッセージ
        // トークン "int" に構文エラーがあります。
        // このトークンの後には Dimensions を指定する必要があります
        // ※コンパイルエラーの例ここまで
        // というコンパイルエラーになるので、ラッパークラスを
        // 使用します。
        ArrayList<Integer> array = new ArrayList<Integer>();
        array.add( new Integer( 100 ) );
        array.add( new Integer( 200 ) );
        array.add( new Integer( 300 ) );
        for( int iF1 = 0; iF1 < array.size(); ++iF1 )
        {
            Integer e = array.get( iF1 );
            System.out.print( e + ", " );
        }
        // 100, 200, 300, 
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/03/08
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。