logo

Generics Java nyelven

A Java Generics A programozás a J2SE 5-ben került bevezetésre a típusbiztos objektumok kezelésére. Stabillá teszi a kódot azáltal, hogy a fordítás során észleli a hibákat.

windows parancs arp

A generikusok előtt bármilyen típusú objektumot tárolhatunk a gyűjteményben, azaz nem általános. Most az általánosok arra kényszerítik a Java programozót, hogy egy adott típusú objektumot tároljon.

A Java Generics előnyei

A generikus gyógyszereknek alapvetően 3 előnye van. Ezek a következők:

1) Típusbiztonság: Az általánosságokban csak egyetlen típusú objektumot tarthatunk. Nem teszi lehetővé más tárgyak tárolását.

Generics nélkül bármilyen típusú objektumot tárolhatunk.

 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) Típusöntés nem szükséges: Nincs szükség az objektum beírására.

A Generics előtt be kell írnunk a cast.

 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) Fordítási idő ellenőrzése: Fordítási időben ellenőrzik, így a probléma nem fordul elő futás közben. A jó programozási stratégia azt mondja, hogy sokkal jobb a probléma kezelése fordítási időben, mint futási időben.

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

Szintaxis általános gyűjtemény használatához

 ClassOrInterface 

Példa a Generics használatához java-ban

 ArrayList 

Teljes példa a Java általánosságára

Itt az ArrayList osztályt használjuk, de bármilyen gyűjteményosztályt használhat, például ArrayList, LinkedList, HashSet, TreeSet, HashMap, Comparator stb.

 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()); } } } 
Tesztelje most

Kimenet:

 element is: jai rahul jai 

Példa Java Generics alkalmazásra a Map használatával

Most térképelemeket fogunk használni generikumok segítségével. Itt át kell adnunk a kulcsot és az értéket. Értsük meg egy egyszerű példán keresztül:

 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>
Tesztelje most

Kimenet

 1 vijay 2 ankit 4 umesh 

Általános osztály

Azokat az osztályokat, amelyek bármilyen típusra hivatkozhatnak, általános osztálynak nevezzük. Itt a T típus paramétert használjuk az adott típus általános osztályának létrehozására.

Nézzünk egy egyszerű példát az általános osztály létrehozására és használatára.

Általános osztály létrehozása:

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

A T típus azt jelzi, hogy bármilyen típusra hivatkozhat (például String, Integer és Employee). Az osztályhoz megadott típust fogja használni az adatok tárolására és lekérésére.

import szkenner java

Általános osztály használata:

Lássuk a kódot az általános osztály használatához.

 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()); }} 
Tesztelje most

Kimenet

 2 

Paraméterek típusa

A típusparaméterek elnevezési konvenciói fontosak az általános ismeretek alapos megtanulásához. Az általános típusparaméterek a következők:

formátum string java
  1. T - Típus
  2. E - Elem
  3. K - Kulcs
  4. N – Szám
  5. V - Érték

Általános módszer

Az általános osztályhoz hasonlóan létrehozhatunk egy általános metódust, amely bármilyen típusú argumentumot elfogad. Itt az argumentumok hatóköre arra a metódusra korlátozódik, ahol deklarálva van. Lehetővé teszi statikus és nem statikus módszereket is.

Nézzünk egy egyszerű példát a java általános módszerére a tömbelemek nyomtatására. Mi itt használunk ÉS az elem jelölésére.

 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 ); } } 
Tesztelje most

Kimenet

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

Helyettesítő karakter a Java Genericsben

A ? (kérdőjel) szimbólum a helyettesítő karaktert jelöli. Bármilyen típust jelent. Ha azt írjuk, az a szám bármely gyermekosztályát jelenti, pl. Integer, Float és double. Most már bármelyik gyermekosztály objektumon keresztül meghívhatjuk a Number class metódusát.

Használhatunk helyettesítő karaktert a paraméter, mező, visszatérési típus vagy helyi változó típusa. Nem megengedett azonban a helyettesítő karakter használata típusargumentumként egy általános metódushíváshoz, egy általános osztálypéldány létrehozásához vagy egy szupertípushoz. .

Értsük meg az alábbi példán keresztül:

 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); }} 

Kimenet

 drawing rectangle drawing circle drawing circle 

Felső korlátos helyettesítő karakterek

A felső korlátos helyettesítő karakterek célja a változókra vonatkozó korlátozások csökkentése. Az ismeretlen típust egy adott típusra vagy annak altípusára korlátozza. Ezt a helyettesítő karakter ('?') deklarálásával használják, amelyet az expands (osztály esetén) vagy implements (interfész esetén) kulcsszó követ, majd a felső határ.

Szintaxis

 List 

Itt,

? egy helyettesítő karakter.

kiterjed , egy kulcsszó.

npm gyorsítótár törlése

Szám , a java.lang csomagban található osztály

Tegyük fel, hogy meg akarjuk írni a metódust a Szám listához és altípusaihoz (például Integer, Double). Használata Lista alkalmas a Number típusú listára vagy bármely alosztályára, míg Lista csak a Number típusú listával működik. Így, Lista kevésbé korlátozó, mint Lista .

Példa a felső korlát helyettesítő karakterére

Ebben a példában a felső korlátos helyettesítő karaktereket használjuk a Lista és Lista metódusának írásához.

 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)); } } 
Tesztelje most

Kimenet

 displaying the sum= 30.0 displaying the sum= 70.0 

Korlátlan helyettesítő karakterek

A korlátlan helyettesítő karakter típus egy ismeretlen típusú listát jelöl, például a Lista. Ez a megközelítés a következő forgatókönyvekben lehet hasznos: -

  • Amikor az adott metódust az Object osztályban biztosított funkcionalitás segítségével valósítják meg.
  • Amikor az általános osztály tartalmazza azokat a metódusokat, amelyek nem függenek a típusparamétertől.

Példa korlátlan helyettesítő karakterekre

 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); } } 
Tesztelje most

Kimenet

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

Alsó korlátos helyettesítő karakterek

Az alsó korlátos helyettesítő karakterek célja, hogy az ismeretlen típust egy adott típusra vagy annak szupertípusára korlátozzák. Ezt a helyettesítő karakter ('?') deklarálásával használják, amelyet a szuper kulcsszó követ, majd az alsó korlát.

Szintaxis

 List 

Itt,

? egy helyettesítő karakter.

szuper , egy kulcsszó.

Egész szám , egy wrapper osztály.

tömblista módszerek

Tegyük fel, hogy meg akarjuk írni a metódust az Integer listához és szupertípusához (mint például a szám, az objektum). Használata Lista alkalmas Integer típusú listára vagy bármely szuperosztályára, míg Lista csak az Integer típusú listával működik. Így, Lista kevésbé korlátozó, mint Lista .

Példa alsó határú helyettesítő karakterre

Ebben a példában az alsó korlátos helyettesítő karaktereket használjuk a Lista és Lista metódusának írásához.

 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); } } 
Tesztelje most

Kimenet

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