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,'vijay'); map.put(4,'umesh'); map.put(2,'ankit'); //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()+' '+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('vivek');//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
- T - Típus
- E - Elem
- K - Kulcs
- N – Szám
- 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 = { 'J', 'A', 'V', 'A', 'T','P','O','I','N','T' }; System.out.println( 'Printing Integer Array' ); printArray( intArray ); System.out.println( 'Printing Character Array' ); 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('drawing rectangle');} } class Circle extends Shape{ void draw(){System.out.println('drawing circle');} } 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('displaying the sum= '+add(l1)); ArrayList l2=new ArrayList(); l2.add(30.0); l2.add(40.0); System.out.println('displaying the sum= '+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('displaying the Integer values'); display(l1); List l2=Arrays.asList('One','Two','Three'); System.out.println('displaying the String values'); 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('displaying the Integer values'); addNumbers(l1); List l2=Arrays.asList(1.0,2.0,3.0); System.out.println('displaying the Number values'); addNumbers(l2); } }Tesztelje most
Kimenet
displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0