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,'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>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('vivek');//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
- T – tipas
- E – elementas
- K – raktas
- N – skaičius
- 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 = { '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 ); } }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('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); }}
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('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)); } }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('displaying the Integer values'); display(l1); List l2=Arrays.asList('One','Two','Three'); System.out.println('displaying the String values'); 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('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); } }Išbandykite dabar
Išvestis
displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0