コンピューター, プログラミング
Javaのジェネリック:説明と方法
Java言語の登場を皮切りには間違いなく、その機能性に正の瞬間をもたらした変化の多くを受けています。 これらの重要な変化の一つは、Javaのジェネリックや一般化の導入です。 この機能は、言語はより柔軟で汎用性の高い、だけでなく、データ型をもたらすという点でより安全にしません。
実際には、Java汎用コードではジェネリック医薬品の導入前は、型参照オブジェクトの観点からだけでなく、作成することができることです。 このようなリンクは、任意のオブジェクトを割り当てることができます。 結局のところ、Javaでのクラスは暗黙のObjectクラスの相続人です。 しかし、このアプローチは、ターゲット・タイプのオブジェクトからオブジェクトの見かけ上の変換のセキュリティタイプに関連する多くのエラーの潜在的な源です。 一般化を使用する場合は、すべてのキャストは、エラーのためにも、可能性を排除し、暗黙的かつ自動的に実行されます。
Javaのジェネリック:説明と例
私たちは、下図の通常のクラスへの一般のアプリケーションの簡単な例を考えてみましょう。 そして、Javaのジェネリックのすべての微妙なニュアンスの詳細な検査に進みます。
クラス宣言がペアを発生する方法に注意してください。 直ちにクラス名の後に、それは、このクラスのインスタンスを作成するプロセスである充填剤の一種であり、文字Tを示し開角括弧は、特定のタイプによって置き換えられます。 これは次のようになります。ペア<整数> OBJ =新しいペア<整数>()。 代わりにTの任意の文字を指定することができ、しかし、原則として、T、V又はE.を使用することに留意すべきです
注:空のままにすることができるコンストラクタで基準角度ブラケットを宣言するときにターゲット・タイプを指定し、ジャワの第八のバージョンで始まります。 ペア<整数> OBJ =新しいペア<>():だから例は、上記のように書き換えることができます。
クラスはフィールド、リンク、あなたはその文字を使用することができる方法によって返されるオブジェクトの特定のタイプのではなく、彼の体には、その後、このように宣言された場合。 Tので、クラスオブジェクトは、この場合における第1および第2のフィールドは、整数型であろう特定のタイプに置き換えられ作成します。
引数とfirstItem secondItemのロジックに続いて、また、Integer型またはサブクラスのものでなければならない適切なコンストラクタに言及しました。 あなたがオブジェクトを作成するときに指定されたものと異なるデータ型を送信しようとすると、コンパイラはこのミスをせません。 ペア<整数> OBJ =新しいペア<>(新しい整数(1)、新しい整数(2))を次のようにオブジェクトがあろうこのように、引数のコンストラクタ。 同じことは、引数とメソッドsetFirst setSecondに適用されます。 そして、あなたはおそらく、メソッドgetFirstとgetSecond推測してきたとInteger型の値を返しますよう。
いくつかのパラメータのクラス型と一般化
一般クラスでもカンマで角括弧内に設定されているタイプの複数のパラメータを宣言することができます。 ペアのクラスは、以下に提示された場合によって再設計されました。
あなたが見ることができるようにあなたが角括弧でこのクラスのインスタンスを作成するときに、パラメータとしての型の同じ数を示す必要があります。 あなたは地図などのデータ構造のこのタイプに精通している場合、あなたはそれがまったく同じ原理を使用していることがわかります。 値の種類 - があり、最初の引数は、キーの種類、および秒を指定します。 送信のタイプのオブジェクト引数が重複してもよい場合に留意すべきです。 たとえば、次の広告のペアクラスのインスタンスは絶対に正しいです:ペア<文字列、文字列> OBJ。
一般化のいくつかの機能
先に進む前に、Javaコンパイラはクラスのペアの異なるバージョンを作成しないことに留意すべきです。 実際には、一般的なタイプをコンパイルするプロセス内のすべての情報が削除されます。 代わりに、あなたはペアのクラスの特別バージョンを作成し、適切なタイプを持参します。 しかし、プログラムの中で、クラスの唯一のジェネリックバージョンはまだあります。 このプロセスは、Javaのジェネリック洗浄タイプで呼ばれています。
重要な点に注意してください。 同じJavaジェネリッククラスの異なるバージョンへのリンクは1と同じオブジェクトを指すことはできません。 ペア<整数> obj1とペア<ダブル> obj2が:それは、我々は2つのリンクがあるとしています。 これにより、ラインにOBJ1 = OBJ2エラー。 両方の変数ペア
ジェネリッククラスの制限
それは、一般的なクラスのJava引数がクラス型でなければならないパラメータを渡すことです、一般化が唯一の参照型に適用することができることを知っておくことが重要です。 二重又は長いような、例えば、などのこれらの単純なタイプは、転送することができません。 つまり、次の行のペアのクラス宣言が許可されていません:ペア<整数> OBJ。 各プリミティブ型に対応するJavaラッパークラスがあるのでしかし、この制限は、深刻な問題ではありません。 厳密に言えば、クラスのペアを使用すると、整数およびブール値avtoupakovkaはすべてあなたのために行いカプセル化したい場合:ペア<整数、ブール> OBJ =新しいペア<>(25、true)を。
もう一つの重大な制限は、パラメータの型のインスタンスを作成することができないことです。 たとえば、次の行は、コンパイルエラーが発生します:Tは最初の=新しいT()。 引数が完全なクラスや抽象的、あるいはインターフェースを通過したかどうかを事前に知っていないので、これは、明らかです。 同じことは、アレイを作成するために行きます。
限られた種類
ジェネリッククラスをJavaへの引数として渡すことができるタイプのリストを制限する必要があるとき、かなり頻繁に状況があります。 私たちは私たちのクラスのペアで、我々は彼らにさらに数学的な操作のための数値のみをカプセル化したいと仮定しましょう。 これを行うために、我々は、パラメータの型の上限を定義する必要があります。 これは、山括弧で渡されるすべての引数を継承したスーパークラスの広告によって実現されます。 これは次のようになります:クラスペア
これは一般的なレセプションです。 このような制限は、多くの場合、1と同じクラスで、互換性の型パラメータを提供するために使用されています。 私たちのクラスのペアの例を考えてみましょう:クラスペア
「ボトム」を制限することは、まったく同じ方法であるが、代わりに単語の単語スーパーのスペルを拡張します。 その分類されたクラスペア
一般的なJavaメソッドとコンストラクタ
Javaでは、一般化は、クラスだけでなく、方法にも適用することができます。 例えば、一般的な方法は、通常の教室で宣言することができます。
上の図に見られるように、広告の一般方法は、大したことないです。 メソッドの戻り値の型は角括弧を入れて、そこに型パラメータを指定する前に十分な。
すべてが、コンストラクタと同様に行われた場合:
この場合、角括弧は、彼は戻り値はありませんので、デザイナーの名前の前に置きます。 両方のプログラムの結果は次のようになります。
整数
弦
Similar articles
Trending Now