logo

Generics Java

The Java Generics J2SE 5 yra įdiegtas programavimas, skirtas dirbti su tipo saugais objektais. Tai daro kodą stabilų, nes kompiliavimo metu aptinka klaidas.

makiažo produktų pavadinimas

Prieš bendrinius, kolekcijoje galime saugoti bet kokio tipo objektus, t. y. nebendrinius. Dabar generiniai vaistai verčia „Java“ programuotoją saugoti tam tikro tipo objektus.

Java Generics privalumas

Iš esmės yra 3 generinių vaistų pranašumai. Jie yra tokie:

1) tipo sauga: Bendruosiuose produktuose galime laikyti tik vieno tipo objektus. Tai neleidžia saugoti kitų objektų.

Be Generics galime saugoti bet kokio tipo objektus.

 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) Tipo liejimas nereikalingas: Nereikia rašyti objekto.

Prieš Generics, turime įvesti 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) Kompiliavimo laiko tikrinimas: Jis tikrinamas kompiliavimo metu, todėl problema nekils vykdymo metu. Gera programavimo strategija sako, kad daug geriau išspręsti problemą kompiliavimo metu nei vykdymo metu.

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

Sintaksė naudoti bendrą kolekciją

 ClassOrInterface 

Pavyzdys naudoti „Generics“ programoje „Java“.

 ArrayList 

Visas „Java“ bendrosios programos pavyzdys

Čia mes naudojame „ArrayList“ klasę, tačiau galite naudoti bet kurią kolekcijos klasę, pvz., „ArrayList“, „LinkedList“, „HashSet“, „TreeSet“, „HashMap“, „Comparator“ ir kt.

 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()); } } } 
Išbandykite dabar

Išvestis:

 element is: jai rahul jai 

„Java Generics“ naudojant žemėlapį pavyzdys

Dabar mes naudosime žemėlapio elementus naudodami bendruosius žodžius. Čia turime perduoti raktą ir vertę. Supraskime tai paprastu pavyzdžiu:

 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>
Išbandykite dabar

Išvestis

mikrolitinis branduolys
 1 vijay 2 ankit 4 umesh 

Bendroji klasė

Klasė, galinti nurodyti bet kurį tipą, yra žinoma kaip bendroji klasė. Čia mes naudojame T tipo parametrą, kad sukurtume konkretaus tipo bendrąją klasę.

Pažiūrėkime paprastą pavyzdį, kaip sukurti ir naudoti bendrąją klasę.

Bendrosios klasės kūrimas:

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

T tipas rodo, kad jis gali reikšti bet kokį tipą (pvz., Eilutę, Sveikąjį skaičių ir Darbuotoją). Klasei nurodytas tipas bus naudojamas duomenims saugoti ir nuskaityti.

Naudojant bendrąją klasę:

Pažiūrėkime, kaip naudoti bendrąją klasę.

 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()); }} 
Išbandykite dabar

Išvestis

 2 

Tipo parametrai

Tipo parametrų įvardijimo taisyklės yra svarbios norint gerai išmokti bendrųjų žodžių. Įprasti tipo parametrai yra šie:

Java indeksas
  1. T – tipas
  2. E – elementas
  3. K – raktas
  4. N – skaičius
  5. V – Vertė

Bendrasis metodas

Kaip ir bendroji klasė, galime sukurti bendrąjį metodą, kuris gali priimti bet kokio tipo argumentus. Čia argumentų apimtis apsiriboja metodu, kuriame jis deklaruojamas. Tai leidžia naudoti statinius ir nestatinius metodus.

Pažiūrėkime paprastą Java bendrojo metodo masyvo elementams spausdinti pavyzdį. Mes naudojame čia IR elementui žymėti.

 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 ); } } 
Išbandykite dabar

Išvestis

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

Pakaitos simbolis programoje „Java Generics“.

? (klaustukas) simbolis žymi pakaitos simbolio elementą. Tai reiškia bet kokį tipą. Jei rašome , tai reiškia bet kurią antrinę skaičių klasę, pvz., Integer, Float ir double. Dabar galime iškviesti skaičių klasės metodą per bet kurį antrinės klasės objektą.

Mes galime naudoti pakaitos simbolį kaip a parametro, lauko, grąžinimo tipo arba vietinio kintamojo tipas. Tačiau neleidžiama naudoti pakaitos simbolio kaip tipo argumento bendriniam metodo iškvietimui, bendrosios klasės egzemplioriaus kūrimui arba supertipui. .

Supraskime tai pagal toliau pateiktą pavyzdį:

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

Išvestis

 drawing rectangle drawing circle drawing circle 

Viršutinės ribos pakaitos simboliai

Viršutinės ribos pakaitos simbolių paskirtis yra sumažinti kintamojo apribojimus. Tai apriboja nežinomą tipą, kad jis būtų konkretus tipas arba to tipo potipis. Jis naudojamas deklaruojant pakaitos simbolį ('?'), po kurio nurodomas plėtinių (klasės atveju) arba įgyvendinamas (sąsajos atveju) raktinis žodis, po kurio nurodoma viršutinė riba.

Sintaksė

 List 

Čia

? yra pakaitos simbolis.

tęsiasi , yra raktinis žodis.

Skaičius , yra java.lang pakete esanti klasė

Tarkime, mes norime parašyti skaičių ir jo potipių sąrašo metodą (pvz., Integer, Double). Naudojant Sąrašas yra tinkamas tipo Number sąrašui arba bet kuriam jo poklasiui, tuo tarpu Sąrašas veikia tik su sąrašu, kurio tipas yra numeris. Taigi, Sąrašas yra mažiau ribojantis nei Sąrašas .

Viršutinės ribos pakaitos simbolio pavyzdys

Šiame pavyzdyje mes naudojame viršutinės ribos pakaitos simbolius, norėdami parašyti metodą sąrašui ir sąrašui.

 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)); } } 
Išbandykite dabar

Išvestis

 displaying the sum= 30.0 displaying the sum= 70.0 

Neriboti pakaitos simboliai

Neribotas pakaitos simbolio tipas reiškia nežinomo tipo sąrašą, pvz., Sąrašas. Šis metodas gali būti naudingas šiais atvejais: -

java interviu klausimai
  • Kai duotas metodas įgyvendinamas naudojant Object klasėje pateiktą funkcionalumą.
  • Kai bendrojoje klasėje yra metodai, kurie nepriklauso nuo tipo parametro.

Neribotų pakaitos simbolių pavyzdys

 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); } } 
Išbandykite dabar

Išvestis

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

Apatinės ribos pakaitos simboliai

Apatinės ribos pakaitos simbolių paskirtis yra apriboti nežinomą tipą, kad jis būtų konkretus tipas arba to tipo supertipas. Jis naudojamas deklaruojant pakaitos simbolį („?“), po kurio nurodomas super raktinis žodis, po kurio nurodoma jo apatinė riba.

Sintaksė

 List 

Čia

? yra pakaitos simbolis.

super , yra raktinis žodis.

Sveikasis skaičius , yra vyniojimo klasė.

java kalbos interviu klausimai

Tarkime, mes norime parašyti sveikojo skaičiaus ir jo supertipo sąrašo metodą (pvz., Skaičius, Objektas). Naudojant Sąrašas tinka Integer tipo sąrašui arba bet kuriai jo superklasei, tuo tarpu Sąrašas veikia tik su Integer tipo sąrašu. Taigi, Sąrašas yra mažiau ribojantis nei Sąrašas .

Apatinės ribos pakaitos simbolio pavyzdys

Šiame pavyzdyje mes naudojame apatinės ribos pakaitos simbolius, norėdami parašyti metodą sąrašui ir sąrašui.

 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); } } 
Išbandykite dabar

Išvestis

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