ラッパークラスとは
このようなクラスはどのように役立ちますか?
一般に、ラッパークラスは、別のクラスまたはコンポーネントの機能を「ラップ」または「カプセル化」するクラスです。これらは、基礎となるクラスまたはコンポーネントの実装からの抽象化レベルを提供することにより有用です。たとえば、COMコンポーネントをラップするラッパークラスは、呼び出しコードに煩わされることなく、COMコンポーネントを呼び出すプロセスを管理できます。また、関連するインターフェイスポイントの数を減らすことで、基になるオブジェクトの使用を簡素化できます。多くの場合、これにより、基礎となるコンポーネントをより安全に使用できます。
ラッパークラスは、プリミティブ型をオブジェクトとして使用する方法を提供します。各プリミティブには、次のようなラッパークラスがあります。
int Integer
byte Byte
整数とバイトは、プリミティブな整数とバイトのラッパークラスです。プリミティブをオブジェクトとして使用する必要がある場合は、時間/制限があるため、ラッパークラスはボクシング/アンボクシングと呼ばれるメカニズムを提供します。
概念は次の例でよく理解できます。
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
これが方法です。ラッパークラスタイプを使用して、他のプリミティブタイプにも変換できます。このタイプの変換は、プリミティブ型をオブジェクトに変換し、それらを使用して他のプリミティブも取得する必要がある場合に使用されます。このアプローチでは、大きなコードを記述する必要があります。ただし、以下のようにコードスニペットを実現できるため、単純なキャスト手法でも同じことが実現できます。
double d = 135.0;
int integerValue = (int) d ;
Double値は明示的に整数値に変換されますが、ダウンキャストとも呼ばれます。
ラッパークラスは、必ずしも別のクラスをラップする必要はありません。 APIクラスラッピング機能などがあります。 dllファイル。
たとえば、dllラッパークラスを作成すると、すべてのdllの初期化とクリーンアップを処理し、たとえばGetProcAddress()
。
乾杯!
ラッパークラスは、名前と同じように、他の何かを「ラップ」するクラスです。
より正式な定義は、 Adapter Pattern を実装するクラスです。これにより、APIの1つのセットをより使いやすく、読みやすい形式に変更できます。たとえば、C#では、ネイティブWindows APIを使用する場合、.NET設計ガイドラインに準拠するクラスにラップするのに役立ちます。
ラッパークラスと呼ばれるデザインパターンがいくつかあります。
また、一部の環境では、ラッパークラスが行うことの多くがアスペクトに置き換えられていることに注意することも重要です。
編集:
一般に、ラッパーは、wrappeeの実装を気にせずにwrappeeの機能を拡張します。そうしないと、ラップされたクラスを拡張したり、拡張したりする意味がありません。典型的な例は、他のサービスインターフェイスのすべての実装に追加するのではなく、他のサービスインターフェイスの周りにタイミング情報またはロギング機能を追加することです。
これは、アスペクトプログラミングの典型的な例になります。インターフェイスファンクションを関数ごとに実行して定型的なログを追加するのではなく、アスペクトプログラミングでは、メソッドの一種の正規表現であるポイントカットを定義し、一致するすべてのメソッドの前後または前後に実行するメソッドを宣言しますポイントカット。アスペクトプログラミングは、ラッパークラスも使用できるDecoratorパターンの一種であると言えますが、どちらのテクノロジーにも他の用途があります。
ラッパークラスは、別のクラスをラップし、クライアントとラップされる元のクラスとの間の抽象化を提供するクラスです。
ラッパークラスは通常、プライベートプロパティとしてオブジェクトを持つクラスです。ラッパーはそのプライベートオブジェクトのAPIを実装しているため、プライベートオブジェクトが引数として渡すことができます。
コレクションがあり、オブジェクトがコレクションに追加されたときに何らかの変換を使用するとします。コレクションのすべてのメソッドを持つラッパークラスを記述します。 add()が呼び出されると、ラッパーは引数をプライベートコレクションに渡すのではなく、引数を変換します。
ラッパーは、コレクションを使用できる場所ならどこでも使用でき、プライベートオブジェクトは、それを参照して読み取る他のオブジェクトを保持できます。
Javaプログラミングは、プリミティブデータ型をラッパークラスのオブジェクトに対応するように変換するために、各プリミティブデータ型のラッパークラスを提供します。
ラッパークラスは、別のクラスをラップして、クライアントとラップされている元のクラスの間に間接レイヤーと抽象化のレイヤーを追加するために使用されるクラスです。
ラッパークラスは、プリミティブデータ型のラッパーです。対応するクラスインスタンスのプリミティブデータ型を表します。ブールデータ型は、ブールクラスインスタンスとして表すことができます。 Javaのすべてのプリミティブラッパークラスは不変です。つまり、一度ラッパークラスインスタンスに値を割り当てた後は変更できません。
ラッパークラスを快適にすることは簡単なことではありません。ラッパークラスを他の一部の人がどのように設計するかを理解することも簡単な仕事ではありません。コードではなくアイデアだからです。アイデアを理解したときにのみ、ラッパーを理解できます。
私は現在、自分のプロジェクトにラッパークラスを使用し、主な利点(トピックの説明を広げるための単一の利点)を使用しました。
例外処理:別のクラスがラップするメインクラスには、例外が発生した場合に例外をスローするメソッドがあるため、例外を処理してすぐにログに記録するラッパークラスを作成しました。したがって、私の主な範囲では、例外処理はありません。メソッドを呼び出して何かをするだけです。
簡単な使用法:オブジェクトを簡単に開始できます。通常、開始フェーズは多くのステップで構成されます。
コードの読みやすさ:別のプログラマーが私のコードを開くと、コードは非常に明確で操作しやすいように見えます。
詳細の非表示:別のプログラマーが使用するクラスを生成する場合、「エラー処理、例外処理、メッセージのロギングなど」などの詳細をラップして、プログラマーが処理する必要がないようにすることができます。カオス、単にメソッドを使用します。
ラッパークラスが存在するようになったのは、プログラマーの基本的なニーズを満たすためです。つまり、オブジェクトのみが許可されている場合はプリミティブ値を使用します。その名前が示唆するように、ラッパークラスはプリミティブな値をラップし、その値をオブジェクトに保持します。したがって、ジェネリック、ハッシュマップキー、Arraylistなど、プリミティブが許可されていないすべての場所に、プログラマはこれらのプリミティブ値を対応するラッパータイプとして提供するオプションを持っています。
さらに、これらのラッパータイプには、プリミティブタイプから対応するラッパータイプへの変換、および文字列からラッパータイプへの変換を行うユーティリティメソッドが多数あります。
ラッパークラスの詳細な記事をブログに書いており、ラッパータイプの概念を詳細に説明しています。 http://www.javabrahman.com/corejava/Java-wrapper-classes-tutorial-with-examples / (開示-このブログは私が所有しています)