logo

Java のジェネリックス

Java ジェネリックス J2SE 5 では、タイプセーフなオブジェクトを処理するプログラミングが導入されました。コンパイル時にバグを検出することでコードを安定させます。

javaからjsonオブジェクトへ

ジェネリックを使用する前は、任意のタイプのオブジェクト (つまり、非ジェネリック) をコレクションに保存できます。現在、ジェネリクスは Java プログラマに特定のタイプのオブジェクトを格納することを強制します。

Java ジェネリックの利点

ジェネリック医薬品のメリットは主に3つあります。それらは次のとおりです。

1) タイプセーフティ: ジェネリックスで保持できるオブジェクトのタイプは 1 つだけです。他のオブジェクトを保存することはできません。

ジェネリックがなければ、あらゆる種類のオブジェクトを保存できます。

 List list = new ArrayList(); list.add(10); list.add('10'); With Generics, it is required to specify the type of object we need to store. List list = new ArrayList(); list.add(10); list.add('10');// compile-time error 

2) 型キャストは必要ありません。 オブジェクトを型キャストする必要はありません。

ジェネリックの前に、型キャストする必要があります。

 List list = new ArrayList(); list.add('hello'); String s = (String) list.get(0);//typecasting After Generics, we don't need to typecast the object. List list = new ArrayList(); list.add('hello'); String s = list.get(0); 

3) コンパイル時のチェック: コンパイル時にチェックされるため、実行時に問題は発生しません。優れたプログラミング戦略では、実行時よりもコンパイル時に問題を処理する方がはるかに優れています。

 List list = new ArrayList(); list.add('hello'); list.add(32);//Compile Time Error 

構文 汎用コレクションを使用するには

 ClassOrInterface 

Javaでジェネリックを使用するには

 ArrayList 

Java のジェネリックスの完全な例

ここでは ArrayList クラスを使用していますが、ArrayList、LinkedList、HashSet、TreeSet、HashMap、Comparator などの任意のコレクション クラスを使用できます。

 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

 import java.util.*; class TestGenerics1{ public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('rahul'); list.add('jai'); //list.add(32);//compile time error String s=list.get(1);//type casting is not required System.out.println('element is: '+s); Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 
今すぐテストしてください

出力:

 element is: jai rahul jai 

Map を使用した Java ジェネリックの例

次に、ジェネリックを使用してマップ要素を使用します。ここでは、キーと値を渡す必要があります。簡単な例でそれを理解してみましょう。

 import java.util.*; class TestGenerics2{ public static void main(String args[]){ Map map=new HashMap(); map.put(1,&apos;vijay&apos;); map.put(4,&apos;umesh&apos;); map.put(2,&apos;ankit&apos;); //Now use Map.Entry for Set and Iterator Set<map.entry> set=map.entrySet(); Iterator<map.entry> itr=set.iterator(); while(itr.hasNext()){ Map.Entry e=itr.next();//no need to typecast System.out.println(e.getKey()+&apos; &apos;+e.getValue()); } }} </map.entry></map.entry>
今すぐテストしてください

出力

 1 vijay 2 ankit 4 umesh 

汎用クラス

任意の型を参照できるクラスは、ジェネリック クラスと呼ばれます。ここでは、T 型パラメーターを使用して、特定の型のジェネリック クラスを作成しています。

ジェネリック クラスを作成して使用する簡単な例を見てみましょう。

ジェネリッククラスの作成:

 class MyGen{ T obj; void add(T obj){this.obj=obj;} T get(){return obj;} } 

T 型は、任意の型 (String、Integer、Employee など) を参照できることを示します。クラスに指定した型は、データの保存と取得に使用されます。

Java正規表現で

ジェネリッククラスの使用:

ジェネリック クラスを使用するコードを見てみましょう。

 class TestGenerics3{ public static void main(String args[]){ MyGen m=new MyGen(); m.add(2); //m.add(&apos;vivek&apos;);//Compile time error System.out.println(m.get()); }} 
今すぐテストしてください

出力

 2 

型パラメータ

型パラメーターの命名規則は、ジェネリックを徹底的に学習するために重要です。共通の型パラメータは次のとおりです。

文字列分割bash
  1. T型
  2. E - 要素
  3. K - キー
  4. N - 番号
  5. V - 値

一般的な方法

ジェネリック クラスと同様に、あらゆる種類の引数を受け入れることができるジェネリック メソッドを作成できます。ここで、引数の範囲は、それが宣言されているメソッドに制限されます。静的メソッドだけでなく非静的メソッドも使用できます。

配列要素を出力するための Java 汎用メソッドの簡単な例を見てみましょう。うちはここを使ってます そして 要素を表します。

 public class TestGenerics4{ public static void printArray(E[] elements) { for ( E element : elements){ System.out.println(element ); } System.out.println(); } public static void main( String args[] ) { Integer[] intArray = { 10, 20, 30, 40, 50 }; Character[] charArray = { &apos;J&apos;, &apos;A&apos;, &apos;V&apos;, &apos;A&apos;, &apos;T&apos;,&apos;P&apos;,&apos;O&apos;,&apos;I&apos;,&apos;N&apos;,&apos;T&apos; }; System.out.println( &apos;Printing Integer Array&apos; ); printArray( intArray ); System.out.println( &apos;Printing Character Array&apos; ); printArray( charArray ); } } 
今すぐテストしてください

出力

 Printing Integer Array 10 20 30 40 50 Printing Character Array J A V A T P O I N T 

Java ジェネリックのワイルドカード

? (疑問符) 記号はワイルドカード要素を表します。どのタイプでもという意味です。と書くと、Integer、Float、double などの Number の子クラスを意味します。これで、任意の子クラス オブジェクトを通じて Number クラスのメソッドを呼び出すことができます。

ワイルドカードを次のように使用できます。 パラメータ、フィールド、戻り値の型、またはローカル変数の型。ただし、ジェネリック メソッドの呼び出し、ジェネリック クラスのインスタンスの作成、またはスーパータイプの型引数としてワイルドカードを使用することはできません。

以下の例でそれを理解してみましょう。

 import java.util.*; abstract class Shape{ abstract void draw(); } class Rectangle extends Shape{ void draw(){System.out.println(&apos;drawing rectangle&apos;);} } class Circle extends Shape{ void draw(){System.out.println(&apos;drawing circle&apos;);} } class GenericTest{ //creating a method that accepts only child class of Shape public static void drawShapes(List lists){ for(Shape s:lists){ s.draw();//calling method of Shape class by child class instance } } public static void main(String args[]){ List list1=new ArrayList(); list1.add(new Rectangle()); List list2=new ArrayList(); list2.add(new Circle()); list2.add(new Circle()); drawShapes(list1); drawShapes(list2); }} 

出力

 drawing rectangle drawing circle drawing circle 

上限付きワイルドカード

上限付きワイルドカードの目的は、変数に対する制限を減らすことです。不明な型を特定の型またはその型のサブタイプに制限します。これは、ワイルドカード文字 ('?') を宣言し、その後に extends (クラスの場合) またはimplements (インターフェイスの場合) キーワード、その後にその上限を宣言することによって使用されます。

文字列から整数へのJava

構文

 List 

ここ、

? はワイルドカード文字です。

伸びる 、がキーワードです。

番号 、java.langパッケージに存在するクラスです。

Number とそのサブタイプ (Integer、Double など) のリストのメソッドを書きたいとします。使用する リスト Number 型またはそのサブクラスのリストに適していますが、 リスト Number 型のリストのみで動作します。それで、 リスト より制限が緩い リスト

上限ワイルドカードの例

この例では、上限ワイルドカードを使用して List と List のメソッドを記述しています。

 import java.util.ArrayList; public class UpperBoundWildcard { private static Double add(ArrayList num) { double sum=0.0; for(Number n:num) { sum = sum+n.doubleValue(); } return sum; } public static void main(String[] args) { ArrayList l1=new ArrayList(); l1.add(10); l1.add(20); System.out.println(&apos;displaying the sum= &apos;+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println(&apos;displaying the sum= &apos;+add(l2)); } } 
今すぐテストしてください

出力

 displaying the sum= 30.0 displaying the sum= 70.0 

無制限のワイルドカード

無制限のワイルドカード型は、List などの不明な型のリストを表します。このアプローチは、次のシナリオで役立ちます。

  • 指定されたメソッドが、Object クラスで提供される機能を使用して実装される場合。
  • ジェネリック クラスに型パラメーターに依存しないメソッドが含まれる場合。

無制限のワイルドカードの例

 import java.util.Arrays; import java.util.List; public class UnboundedWildcard { public static void display(List list) { for(Object o:list) { System.out.println(o); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); display(l1); List l2=Arrays.asList(&apos;One&apos;,&apos;Two&apos;,&apos;Three&apos;); System.out.println(&apos;displaying the String values&apos;); display(l2); } } 
今すぐテストしてください

出力

 displaying the Integer values 1 2 3 displaying the String values One Two Three 

下限ワイルドカード

下限ワイルドカードの目的は、未知の型を特定の型またはその型のスーパータイプに制限することです。これは、ワイルドカード文字 (「?」) の後に super キーワード、その後にその下限を宣言することによって使用されます。

構文

 List 

ここ、

? はワイルドカード文字です。

素晴らしい 、がキーワードです。

整数 、ラッパークラスです。

bash 読み取りファイル

Integer とそのスーパータイプ (Number、Object など) のリストのメソッドを書きたいとします。使用する リスト Integer 型のリストまたはそのスーパークラスのいずれかに適していますが、 リスト 整数型のリストのみで動作します。それで、 リスト より制限が緩い リスト

下限ワイルドカードの例

この例では、下限ワイルドカードを使用して List と List のメソッドを記述しています。

 import java.util.Arrays; import java.util.List; public class LowerBoundWildcard { public static void addNumbers(List list) { for(Object n:list) { System.out.println(n); } } public static void main(String[] args) { List l1=Arrays.asList(1,2,3); System.out.println(&apos;displaying the Integer values&apos;); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println(&apos;displaying the Number values&apos;); addNumbers(l2); } } 
今すぐテストしてください

出力

 displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0