logo

Generics Java

The Java Generics Programmēšana ir ieviesta J2SE 5, lai strādātu ar tipa drošiem objektiem. Tas padara kodu stabilu, atklājot kļūdas kompilēšanas laikā.

unix vs Windows

Pirms vispārīgiem kolekcijā mēs varam glabāt jebkura veida objektus, t.i., ne vispārīgus. Tagad vispārīgie līdzekļi liek Java programmētājam saglabāt noteikta veida objektus.

Java Generics priekšrocības

Ģenēriskajiem medikamentiem galvenokārt ir 3 priekšrocības. Tie ir šādi:

1) tipa drošība: Mēs varam saturēt tikai viena veida objektus vispārīgajos produktos. Tas neļauj uzglabāt citus objektus.

Bez Generics mēs varam uzglabāt jebkura veida 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) Tipa liešana nav nepieciešama: Nav nepieciešams drukāt objektu.

Pirms Generics mums jāievada 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) Kompilēšanas laika pārbaude: Tas tiek pārbaudīts kompilēšanas laikā, tāpēc izpildes laikā problēma neradīsies. Labā programmēšanas stratēģija saka, ka problēmu ir daudz labāk risināt kompilēšanas laikā, nevis izpildlaikā.

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

Sintakse izmantot vispārīgo kolekciju

 ClassOrInterface 

Piemērs lai Java lietotu Generics

 ArrayList 

Pilns Java ģenērikas piemērs

Šeit mēs izmantojam klasi ArrayList, taču jūs varat izmantot jebkuru kolekcijas klasi, piemēram, ArrayList, LinkedList, HashSet, TreeSet, HashMap, Comparator utt.

 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()); } } } 
Izmēģiniet to tūlīt

Izvade:

 element is: jai rahul jai 

Java Generics piemērs, izmantojot karti

Tagad mēs izmantosim kartes elementus, izmantojot sugas. Šeit mums ir jānodod atslēga un vērtība. Ļaujiet mums to saprast ar vienkāršu piemēru:

 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>
Izmēģiniet to tūlīt

Izvade

 1 vijay 2 ankit 4 umesh 

Vispārējā klase

Klase, kas var atsaukties uz jebkuru veidu, ir pazīstama kā vispārīga klase. Šeit mēs izmantojam T tipa parametru, lai izveidotu noteikta veida vispārīgo klasi.

Apskatīsim vienkāršu piemēru vispārīgās klases izveidei un lietošanai.

Vispārējas klases izveide:

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

T tips norāda, ka tas var attiekties uz jebkuru veidu (piemēram, virkne, vesels skaitlis un darbinieks). Klasei norādītais veids tiks izmantots datu glabāšanai un izgūšanai.

tehnoloģiju priekšrocības un trūkumi

Izmantojot vispārīgo klasi:

Apskatīsim kodu, lai izmantotu vispārīgo klasi.

 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()); }} 
Izmēģiniet to tūlīt

Izvade

 2 

Tipa parametri

Tipa parametru nosaukšanas konvencijas ir svarīgas, lai rūpīgi apgūtu vispārīgos vārdus. Parastie tipa parametri ir šādi:

10 no 60
  1. T - Tips
  2. E - elements
  3. K - atslēga
  4. N — numurs
  5. V - Vērtība

Vispārējā metode

Tāpat kā vispārējā klase, mēs varam izveidot vispārīgu metodi, kas var pieņemt jebkāda veida argumentus. Šeit argumentu apjoms ir ierobežots ar metodi, kurā tas ir deklarēts. Tas pieļauj gan statiskas, gan nestatiskas metodes.

Apskatīsim vienkāršu Java vispārīgās metodes piemēru masīva elementu drukāšanai. Mēs izmantojam šeit UN lai apzīmētu elementu.

 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 ); } } 
Izmēģiniet to tūlīt

Izvade

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

Aizstājējzīme programmā Java Generics

? (jautājuma zīme) simbols apzīmē aizstājējzīmes elementu. Tas nozīmē jebkuru veidu. Ja mēs rakstām , tas nozīmē jebkuru skaitļa atvasināto klasi, piemēram, Integer, Float un double. Tagad mēs varam izsaukt skaitļu klases metodi, izmantojot jebkuru bērnu klases objektu.

Mēs varam izmantot aizstājējzīmi kā a parametra tips, lauks, atgriešanas veids vai lokālais mainīgais. Tomēr nav atļauts izmantot aizstājējzīmi kā tipa argumentu vispārīgas metodes izsaukšanai, vispārīgas klases instances izveidei vai supertipam. .

Sapratīsim to, izmantojot tālāk sniegto piemēru:

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

Izvade

 drawing rectangle drawing circle drawing circle 

Augšējās robežas aizstājējzīmes

Augšējo ierobežoto aizstājējzīmju mērķis ir samazināt ierobežojumus mainīgajam. Tas ierobežo nezināmo tipu kā noteiktu veidu vai šī tipa apakštipu. To izmanto, deklarējot aizstājējzīmi ('?'), kam seko atslēgvārds paplašinājums (klases gadījumā) vai implements (interfeisa gadījumā), kam seko tā augšējā robeža.

Sintakse

 List 

Šeit,

? ir aizstājējzīme.

pagarina , ir atslēgvārds.

Numurs , ir klase java.lang pakotnē

Pieņemsim, ka mēs vēlamies uzrakstīt metodi skaitļu un tā apakštipu sarakstam (piemēram, Integer, Double). Izmantojot Saraksts ir piemērots numura tipa sarakstam vai kādai no tā apakšklasēm, turpretim Saraksts darbojas tikai ar numuru tipa sarakstu. Tātad, Saraksts ir mazāk ierobežojošs nekā Saraksts .

Augšējās robežas aizstājējzīmes piemērs

Šajā piemērā mēs izmantojam augšējās robežas aizstājējzīmes, lai rakstītu metodi sarakstam un sarakstam.

10 ml līdz oz
 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)); } } 
Izmēģiniet to tūlīt

Izvade

 displaying the sum= 30.0 displaying the sum= 70.0 

Neierobežoti aizstājējzīmes

Neierobežotais aizstājējzīmes veids ir nezināma veida saraksts, piemēram, saraksts. Šī pieeja var būt noderīga šādos gadījumos: -

  • Kad dotā metode tiek realizēta, izmantojot Object klasē paredzēto funkcionalitāti.
  • Ja vispārīgajā klasē ir metodes, kas nav atkarīgas no tipa parametra.

Neierobežoto aizstājējzīmju piemērs

 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); } } 
Izmēģiniet to tūlīt

Izvade

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

Aizstājējzīmes ar apakšējo robežu

Apakšējās robežas aizstājējzīmju mērķis ir ierobežot nezināmo tipu, lai tas būtu noteikts tips vai šī tipa supertips. To izmanto, deklarējot aizstājējzīmi ('?'), kam seko super atslēgvārds, kam seko tā apakšējā robeža.

Sintakse

 List 

Šeit,

? ir aizstājējzīme.

super , ir atslēgvārds.

Vesels skaitlis , ir iesaiņojuma klase.

statisks atslēgvārds java

Pieņemsim, ka mēs vēlamies uzrakstīt metodi veselā skaitļa sarakstam un tā supertipam (piemēram, numurs, objekts). Izmantojot Saraksts ir piemērots veselu skaitļu sarakstam vai jebkurai no tā virsklasēm, turpretim Saraksts darbojas tikai ar Integer tipa sarakstu. Tātad, Saraksts ir mazāk ierobežojošs nekā Saraksts .

Apakšējās robežas aizstājējzīmes piemērs

Šajā piemērā mēs izmantojam apakšējās robežas aizstājējzīmes, lai rakstītu metodi sarakstam un sarakstam.

 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); } } 
Izmēģiniet to tūlīt

Izvade

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